Skip to main content
Glama

Munim

PyPI Python Tests Licence Glama

One MCP server holding a live session with every client's account at once.

A coding agent can be logged in to one Cloudflare account. One Vercel. One Resend. Connect a second client and the first goes away. So the person looking after a dozen small businesses runs a dozen agent sessions, and none of them can answer a question about more than one client.

Munim holds them all. Each client gets its own registration with the provider, its own token and its own namespace in the tool list, so one agent can read across every client and write inside the one you named.

Kloudfirst       -> Kloudfirst@gmail.com's Account   (3 tools)
Ivy & Fern       -> ivy@example.com's Account        (3 tools)

both sessions opened concurrently, one process, no logout

That is a real run against two real Cloudflare accounts, not a diagram. The second account is a client's and their address is replaced here: they did not consent to a public repository, and this file is also the PyPI page. Reproduce it with your own two: scripts/cross_account_probe.py.

Install

Requires Python 3.10+. Nothing else: no Node, no build step, no account to create first.

uv tool install munim          # or: pipx install munim, or: pip install munim
claude mcp add munim -- munim-mcp

Related MCP server: Daemoon

Start

munim clients                          # who you look after, and what is connected
munim clients add "Ivy & Fern"         # write one down, connect nothing yet
munim connect "Ivy & Fern" cloudflare  # a browser opens; that is the whole setup

There is no wrong order. Connect first and the account you sign in to names the client, or write the client down first and connect whenever. Both arrive in the same place.

Then ask your coding agent something a single logged-in session cannot answer:

which of my clients has a domain expiring this quarter?
check ivyandfern.co.uk for Ivy & Fern Studio

Doing the work, not just the diagnosis

Munim does not wrap each provider in verbs of its own. Every provider here runs its own MCP server with its own tools, so Munim forwards them and supplies the credential:

munim tools "Ivy & Fern" cloudflare          # what that account can be asked to do
munim call  "Ivy & Fern" cloudflare execute --args '{"code": "..."}'

Your coding agent gets the same two as list_provider_tools and call_provider_tool. There is no model in this path, so it works with agents off, and every call is written to the run log with the tool and its arguments. A call names one client and resolves that client's credentials alone.

When a provider's own MCP server does not publish what you need, call_provider_api goes a layer down and makes one HTTP call to that provider's API with the same client's credential. Vercel publishes no environment-variable write and no way to attach a domain to a project, which is what this is for. It takes a path and never a URL, and refuses anything that would send the credential to another host.

Munim is local by default. The checks, the audit and the mail plan are deterministic: they never needed a model and never call one, and neither does the passthrough above. Three tools can also reason about what they find (check, work_on_client, ask_across_clients), and that is switched off until you ask for it, so having a key lying around is not the same as consenting to use it.

munim config ai key gemini   # prompts, stored in ~/.munim/credentials.json
munim config ai on           # takes effect on the next call, no reconnect
munim config ai              # what is on, on what, and where each came from

Hosts are Amazon Bedrock, which works out of the box, plus Google Gemini and Anthropic, which Strands ships as extras: pip install 'munim[gemini]'.

One thing this does not change: Munim runs as an MCP server, so whatever its tools return goes into your coding agent's context and therefore to whichever model that agent runs on. Turning agents off stops Munim calling a model of its own; it cannot change how MCP works. The privacy policy says so plainly.

munim doctor says what is set up, what is not, and the exact command to fix each gap. Start there whenever something is unclear.

Where to find it

The video is a real run against a real client's domain: fifteen deterministic checks find two faults, a Strands agent explains them in the owner's language, and the repair stops at an edge condition because that client is not connected to the provider a repair would need. Nothing in it is staged, which is also why there is no repair on camera.

To run it yourself without installing anything: scripts/check_client.py runs the check catalogue against one client and writes the report, and scripts/fix_client.py runs the repair graph. Both use the same code paths as the check and fix MCP tools, with no agent in front of them.

Documentation

Commands

the whole CLI

Tools

what your coding agent gets, and what it deliberately cannot do

Providers

a page each: setup, what connecting grants, what is verified

Architecture

how it is built, and the four decisions that shape it

Decisions

every design decision and its reasoning, including the wrong ones

Roadmap

what is not done, and why

Development

running the tests, and reproducing the claim above

Why this exists

One person maintains the web and email setup of a dozen small businesses. The clients own the accounts; the operator holds delegated access and does the work. Every provider allows one login at a time, so the workaround is a separate agent session per client.

The costly part is not the switching. It is that a mistake in mail setup breaks nothing visible. Get an A record wrong and the site is down in minutes. Get the SPF record wrong and the client's invoices quietly stop arriving, and nobody notices for weeks.

A munim is the steward a business owner trusts to keep their books and handle their affairs without being asked each time.

Disclosure

Built with AI assistance. No pre-existing code was incorporated; the repository was created during the submission period.

Licence

MIT. See LICENSE.

Contributing

CONTRIBUTING.md says how to run the two suites and what a good change looks like here, which is mostly about writing down why. docs/DECISIONS.md is the numbered log those reasons live in, and several of its entries reverse an earlier one.

Security issues go in a private advisory rather than an issue. SECURITY.md says what is in scope, and lists what is already known and deliberate so a report can skip it.

Available Tools

16 tools
add_clientA

Register a client by name. Holds no credential, only a name and a domain.

Returns the client's id, name and domain.

Use this to write a client down before connecting anything. You do not need it first: naming a domain in check or fix registers it on the spot. Connecting a provider is a separate step, connect_provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat you call this client, for example Acme Ltd. Used in tool names, so two clients cannot differ only by punctuation.
domainNoTheir primary domain, if you know it. It can be added later by naming it in a check.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, so the description carries the burden. It clearly states behavior: it registers a client, holds no credentials, returns the client's id, name, and domain. It also mentions that a domain can be added later. However, it doesn't disclose potential side effects like whether it overwrites an existing client with the same name, or any idempotency behavior. The description is mostly transparent, but lacks some edge-case details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It is three short paragraphs: the first states the core function, the second describes the return value, and the third gives usage guidance. It front-loads the most critical information and every sentence serves a purpose. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema and no annotations, the description adequately explains the return value (client's id, name, and domain). It also provides usage context. However, it could be improved by mentioning what happens if a client with the same name already exists (e.g., error or update), which would help the agent handle edge cases. Still, for a simple registration tool, it's mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a bit of context: it states that the domain can be added later by naming it in a check, and that the tool holds only a name and a domain. However, it does not add much beyond what the schema already explains. The parameter descriptions in the schema are already detailed (e.g., 'Used in tool names, so two clients cannot differ only by punctuation'), so the description adds minimal extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Register a client by name.' It specifies the resource (client) and the action (register/add), and explicitly notes what it does not hold ('Holds no credential, only a name and a domain'), distinguishing it from other tools that may involve credentials. This helps an agent understand exactly what this tool accomplishes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Use this to write a client down before connecting anything.' It also clarifies when it is NOT needed: 'You do not need it first: naming a domain in `check` or `fix` registers it on the spot.' It differentiates from the sibling tool `connect_provider` by stating that connecting a provider is a separate step. This gives clear context for when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_mail_setupA

Carry out a plan from plan_mail_setup.

Returns what was published and what was left unchanged, plus a run_id. When approval is needed and not given it returns needs_approval and changes nothing, so calling it again with approved=true is safe.

approved is required only for records that already exist. Creating one that is absent is not a judgement call; replacing one somebody published is theirs to make, so show them the plan first.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
plan_idYesThe plan_id that plan_mail_setup returned. A plan made for a different client is refused.
approvedNoRequired only when the plan would replace a record that already exists. That is the client's decision, so show them the plan before setting this.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does this well. It discloses return values, the needs_approval state, that changes are not made without approval, that retrying with approved=true is safe, and the side-effect distinction between creating absent records and replacing existing ones.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded. The opening sentence states the action immediately, and every subsequent sentence adds necessary context about return values and approval semantics without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description sufficiently covers what the tool returns, what side effects it may have, and how to handle approval. An agent has enough information to decide whether to call it and to interpret the likely result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that approved is only needed for existing records nominally and that retrying is safe, which clarifies the parameter's behavioral meaning rather than just its type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Carry out a plan from plan_mail_setup.' It clearly identifies this as the execution counterpart to planning, which distinguishes it from sibling tools like plan_mail_setup, check, and fix.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete guidance on when approval is needed, when it is not, and advises showing the plan before setting approved=true. It does not explicitly name alternatives or state when not to use the tool, but the context is clear enough for correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ask_across_clientsA

Ask one question about every client at once, using their own accounts.

Where find_across_clients answers the questions the check catalogue already asks, this reaches each client's provider account through that provider's own MCP server, so it can answer ones nobody wrote a check for. Only clients with a session are included.

Read-only by construction: every tool it holds is filtered to those the provider marks read-only, so a tool that changes anything is not present to be called. Naming one client is what unlocks writes (D5).

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesA question in plain English about every client at once, for example which of my clients has no DMARC policy.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states the read-only nature: 'Read-only by construction' and explains the filtering mechanism. It also discloses that only clients with a session are included, providing transparent behavioral expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening, a contrast to a sibling, and a behavioral note. However, the final sentence 'Naming one client is what unlocks writes (D5)' is cryptic and somewhat tangential, slightly reducing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema required), the description covers purpose, usage, behavior, and parameter semantics thoroughly. It provides enough context for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'question' has a clear description with an example: 'A question in plain English about every client at once, for example which of my clients has no DMARC policy.' This fully explains the parameter's meaning and usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb and resource: 'Ask one question about every client at once, using their own accounts.' It also differentiates itself from the sibling tool find_across_clients, making its role distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly contrasts with find_across_clients, explaining that this tool reaches provider accounts via MCP servers to answer questions not covered by the check catalogue. It also notes the condition 'Only clients with a session are included', giving concrete usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_all_clientsA

Run the whole check catalogue against every client, reporting only what needs attention.

Returns one entry per client that has something wrong, naming the client beside each failing check, plus a run_id. Clients that pass are omitted entirely, so an empty result means every client is healthy.

Read-only across every client, and it never writes. Use check for one client with a report, and find_across_clients when you want one specific check across everybody rather than the whole catalogue.

ParametersJSON Schema
NameRequiredDescriptionDefault
dkim_selectorNoThe DKIM selector to look for. Change it only if the client sends through something other than Resend.resend

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the tool is read-only, 'never writes,' explains the exact return shape (one entry per failing client with client name and run_id), and defines empty results as meaning all clients are healthy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by return behavior and safety, then routing guidance. Every sentence adds meaningful information with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is remarkably complete: it explains the return format, the omission behavior, the read-only nature, and how it differs from relevant siblings. No critical information an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole parameter dkim_selector already has a clear description and default value. The tool description adds no extra parameter-level detail, which is acceptable because the schema fully documents it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Run the whole check catalogue against every client' while narrowing the output to 'only what needs attention.' It also explicitly differentiates itself from sibling tools by naming 'check' and 'find_across_clients' and their distinct scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing guidance: use 'check' for a single client with a reportかな, and 'find_across_clients' when checking one specific check across all clients. It also clarifies when this tool is appropriate by emphasizing it runs the whole catalogue against every client.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

call_provider_apiA

Make one HTTP call to a provider's own REST API with one client's credential.

Returns the status and the parsed body, plus a run_id. Every call is recorded as a mutation whatever the method, because an HTTP verb is a convention rather than a guarantee, and the response body is never written to the log.

Use this only when the provider's MCP server publishes no tool for the job: list_provider_tools first, call_provider_tool if it names one. Vercel publishes no environment-variable write and no project-domain attach, which is what this exists for. Works for cloudflare, vercel and resend, the three whose REST shape Munim knows.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body, as an object.
pathYesA path beginning with one slash, for example /v9/projects. Never a full URL: an absolute URL is refused before the request is built, because it would send this client's credential to another host.
queryNoQuery string parameters, as an object.
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
methodNoGET, POST, PATCH, PUT or DELETE. Every call is recorded as a mutation whatever the method, because an HTTP verb is a convention rather than a guarantee.GET
providerYescloudflare, vercel or resend. Only these three have a known REST base URL and header shape.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states that every call is recorded as a mutation regardless of HTTP method, that the response body is never written to the log, and that absolute URLs are refused to prevent credential leakage. These are critical behavioral traits beyond the schema and are clearly articulated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tight and front-loaded: the purpose is stated in the first sentence, followed by usage guidelines and provider specifics. Every sentence adds value—no filler. The structure flows logically from what it does to when to use it to how it behaves.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description explicitly mentions that it returns 'the status and the parsed body, plus a run_id.' It covers the essential call contract, security constraints, and usage context. For a tool with 6 parameters, the description, combined with a fully described schema, leaves nothing an agent needs to correctly invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description goes beyond the schema by explaining the path constraint (must start with slash, never a full URL) and the rationale for refusing absolute URLs. It also clarifies that the method field, despite being GET by default, is recorded as a mutation for any verb. This adds meaningful semantics to the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Make one HTTP call to a provider's own REST API with one client's credential.' It specifies the resource (provider REST API) and explicitly differentiates from siblings by referencing list_provider_tools and call_provider_tool. The verb and target are unambiguous, and the scope is distinct from the other provider-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: 'Use this only when the provider's MCP server publishes no tool for the job: list_provider_tools first, call_provider_tool if it names one.' This names the alternatives and the condition for choosing this tool. It also provides concrete examples (Vercel env-var write, project-domain attach) and lists supported providers, leaving no ambiguity about when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

call_provider_toolA

Call one of a provider's own tools with one client's credentials.

Returns the provider's own result, plus a run_id. Arguments are forwarded untouched, so anything that server accepts is reachable. Take tool and arguments from list_provider_tools rather than guessing.

One call resolves one named client's session and touches no other account, and the tool and its arguments go to the run log; read it back with launch_status. No model is involved, so this works with agents off.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYesThe provider tool to call, named exactly as list_provider_tools reported it.
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
providerYesThe provider to use, for example cloudflare, vercel or resend. Only what this client is actually connected to is reachable.
argumentsNoThe arguments that tool declares, as an object. Read its inputSchema first rather than guessing.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it discloses the return shape ('provider's own result, plus a run_id'), the forwarding behavior ('Arguments are forwarded untouched'), the side effect of logging ('tool and its arguments go to the run log'), the scope boundary ('touches no other account'), and the no-model behavior. This gives an agent a complete safety and side-effect picture before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is six sentences, each earning its place: purpose, return value, sourcing guidance, scope, logging, and compatibility. It front-loads the core action in the first sentence and avoids any redundant re-statement of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no output schema and no annotations, the description is remarkably complete. It explains the return value, the run log side effect, how to source parameters, and the environment in which the tool works, leaving little an agent needs to infer. The only thing absent is explicit sibling routing, but that is already covered under usage guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all four parameters with 100% coverage, so the baseline is 3. The description adds meaningful guidance beyond the schema by directing the agent to source `tool` and `arguments` from `list_provider_tools` and by clarifying that `client` scopes the call to exactly that one account. This extra semantic guidance earns a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Call one of a provider's own tools with one client's credentials.' This clearly distinguishes it from sibling tools like call_provider_api (which would target the provider's API) and work_on_client (which is broader), by narrowing to a single client's credentials and a provider-defined tool. The first sentence alone makes the tool's job unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to invoke: it specifies acting on one client, using a provider's own tool, and notes 'No model is involved, so this works with agents off.' It also tells the agent to obtain `tool` and `arguments` from `list_provider_tools` rather than guessing, which is actionable guidance. It does not, however, explicitly name alternatives or state when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checkA

Run the deterministic check catalogue against one client or one domain.

Returns the failing checks with an owner-facing sentence for each, counts of what was checked and skipped, a run_id, and report_file, where the report was written. watch and report are control room URLs and appear only while it is running. DNS decides pass or fail, never a model; with agents on, a model adds the explanation and nothing else.

target may be a client name, a domain belonging to one, or a domain nobody has mentioned before, which registers it: there is no setup step. Use audit_all_clients to run the same catalogue across every client at once, and fix to repair what it finds rather than only reporting it.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesA client name, or a bare domain. A domain nobody has mentioned before is registered as a new client, because a DNS lookup is public and reveals nothing.
dkim_selectorNoThe DKIM selector to look for. Change it only if the client sends through something other than Resend.resend

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly. It discloses that DNS decides pass/fail, never a model; that with agents on a model only adds an explanation; that watch/report URLs appear only while running; that unknown domains get registered as clients; and what the return values are. This is rich behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries distinct information: main operation, return values, runtime-only URLs, deterministic behavior, agent-mode behavior, target flexibility, and sibling alternatives. It is front-loaded and dense with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations, yet the description explains what is returned, the side effect of registering unknown domains, how pass/fail is determined, what agent mode changes, and when to use related tools. Nothing essential for selecting and invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents target and dkim_selector well. The description reinforces target semantics by explaining the three possible target forms and the no-setup implication, but it does not add meaning substantially beyond the schema, which is the baseline case for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb–resource pairing: 'Run the deterministic check catalogue against one client or one domain.' It clearly states what the tool does and distinguishes it from siblings by naming audit_all_clients and fix as alternatives, so an agent can tell it apart without reading their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool versus alternatives: 'Use audit_all_clients to run the same catalogue across every client at once, and fix to repair what it finds rather than only reporting it.' It also clarifies that target can be a client name, an existing domain, or a previously unmentioned domain, and that there is no setup step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

client_statusA

What is known about one client: their domain, what is stored, and what actually opens right now.

Returns the client's name and domain; stored, every provider with a credential filed; api_key and mcp_session, saying which of the two stores each one came from; and connected, needs_login and unreachable, from asking each provider live. Never includes a credential value.

Use this for one client and list_clients for all of them. The two stores are not interchangeable: api_key is what the mail tools call REST APIs with, mcp_session is what a provider's own tools run on, and a client can have one without the other.

ParametersJSON Schema
NameRequiredDescriptionDefault
checkNoAsk each provider whether the session still opens, rather than only reporting what is stored.
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It discloses that the tool 'ask[s] each provider live', revealing that it makes network calls and can report 'connected', 'needs_login', and 'unreachable'. It also states a strong privacy guarantee: 'Never includes a credential value.' This goes beyond a typical read operation and gives the agent necessary expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into a clear one-line summary, a return-field breakdown, and usage guidance. Every sentence adds value, though the second and third paragraphs are dense. It could be tightened slightly, but it remains well-structured and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must fully explain return values. It does: it lists the client's name and domain, 'stored', 'api_key', 'mcp_session', and the three live statuses. It also covers the meaning of the two stores and the safety behavior. The description is complete enough for an agent to know exactly what to expect and how to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add explicit parameter explanations beyond the schema, but it does provide context that clarifies the effect of the 'check' parameter (stored vs. live status) and the meaning of 'client' (one registered name). That context is helpful but not essential given the schema already describes both parameters well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise summary: 'What is known about one client.' It identifies the exact resource (one client) and the specific verb (status/returns what is known). It also explicitly differentiates from sibling list_clients: 'Use this for one client and list_clients for all of them.' This makes the tool's scope unambiguous relative to its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use this for one client and list_clients for all of them.' It also explains the non-interchangeability of the two credential stores, which is critical for interpreting results and deciding whether to call this tool versus provider-specific tools. This is clear, direct, and includes an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_providerA

Store a pasted API key for one client and one provider.

Returns which provider was connected, never the credential itself.

Use this only for providers with no browser login, or when a REST API key is needed alongside a session: the mail tools call REST APIs and a browser session is a different credential. munim connect at the terminal does the browser login.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
providerYesThe provider to use, for example cloudflare, vercel or resend. Only what this client is actually connected to is reachable.
credentialYesThe API key or token, pasted. It is stored and never returned by any tool.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it states the credential is stored, is never returned by any tool, and that only the connected provider is returned. It also explains the REST-vs-browser-session distinction, making the side effects and security posture clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action appears first, followed by return behavior, then usage conditions. Every sentence contributes either selection guidance, safety information, or behavioral context, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description usefully states what the tool returns and what it never returns. It also covers when to use it and how it relates to browser login and mail tools. Minor gaps like overwrite behavior or failure modes are not critical for an agent deciding whether to invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the parameters by calling the credential a 'pasted API key' and emphasizing 'one client and one provider,' but it does not add substantial semantic detail beyond the schema's already thorough parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Store a pasted API key for one client and one provider.' It clearly distinguishes the tool's purpose from the sibling tools, which are about calling provider APIs, planning setups, or auditing clients, by framing this as a credential-storage operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: 'Use this only for providers with no browser login, or when a REST API key is needed alongside a session.' It also names the alternative path, `munim connect` at the terminal, for browser login, which helps an agent choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_across_clientsA

Run one named check across every client at once.

Returns one row per client with that check's result and the evidence behind it. Read-only, and it never writes.

need is a check name from the catalogue, such as spf_single, dmarc_policy or dkim_present. Use audit_all_clients to run the whole catalogue instead of one check, and ask_across_clients when the question is open-ended rather than one of these.

ParametersJSON Schema
NameRequiredDescriptionDefault
needYesWhat to look for, as one of the catalogue check names, for example spf_single or dmarc_policy.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'Read-only, and it never writes,' which is a key safety disclosure, and explains the return format. This covers the most important behavioral aspects, though it doesn't mention edge cases like invalid check names or client count limits, which are minor for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise paragraphs. The first sentence front-loads the purpose and output, the second adds the read-only nature, and the third covers parameter guidance and alternatives. Every sentence earns its place with zero fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with an output schema, the description covers purpose, usage, alternatives, and safety. It is fully sufficient for an agent to call it correctly, and the presence of an output schema means return value details are not needed in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the single parameter 'need' with examples, and the description reinforces this with the same examples. Since schema coverage is 100%, the description adds marginal value beyond the schema, meeting the baseline of 3 without elevating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Run one named check across every client at once') and its output (one row per client with result and evidence). It explicitly differentiates from siblings by naming audit_all_clients and ask_across_clients, so an agent can pick it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool versus alternatives: use audit_all_clients for the whole catalogue and ask_across_clients for open-ended questions. It also implies use when you have a specific check name, with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fixA

Check a client's domain, then repair what can be repaired safely.

check explains what is wrong. This acts on it. The same thirteen deterministic checks run first and are still never decided by a model; what a model decides is which repair to reach for, out of a set of tools that cannot do anything else.

Anything that would replace a record somebody already published stops and waits for a person. Approve it in the control room, or call apply_mail_setup with approved=true. Creating a record that is absent is not a judgement call and does not stop.

report_file is always written. watch and report are control room URLs and appear only while it is running; munim approve answers without it.

With agents off the checks still run and their findings still stand, exactly as check degrades: only the repair needs a model.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesA client name, or a bare domain. The same resolution check uses.
dkim_selectorNoThe DKIM selector to look for. Change it only if the client sends through something other than Resend.resend

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it delivers: it explains that the same deterministic checks run, that models only choose a repair, that replacing published records waits for human approval, that creating absent records does not stop, and that report_file is always written. This is rich behavioral disclosure beyond what the schema provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but structured and front-loaded with the core purpose. Every paragraph adds a distinct behavioral or operational point: repair scope, approval gates, reporting artifacts, and degraded-agent mode. Some phrases are cryptic ('munim approve answers without it'), which prevents a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, this covers the important operational dimensions: what is repaired, what is off-limits, how approvals work, reporting artifacts, and behavior with agents off. A clearer statement of the returned status or resolution result would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add much parameter-level detail beyond the schema. It indirectly relates to 'target' via the client/domain resolution, but it does not explain dkim_selector or otherwise deepen the parameter picture. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names an explicit action ('repair what can be repaired safely') and a clear resource ('a client's domain'). It also distinguishes itself from the sibling 'check' tool by saying 'check explains what is wrong. This acts on it.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives usable context: use this when you want to act on check results, and use 'check' for diagnosis. It also references 'apply_mail_setup' for approvals. It stops short of an explicit when-to-use vs. when-not-to-use list, but the alternatives are named and meaningful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_statusA

Read a run back without waiting on it.

Returns that run's events in order: what was checked, what changed, what is waiting on a person. Defaults to the newest run.

A check or a repair can outlast a single tool call, so progress is read from the run log rather than held open.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNoThe run to read, as returned by check, fix or call_provider_tool. The newest run when omitted.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly discloses that the tool is non-blocking, reads from a run log, returns ordered events, and defaults to the newest run. It does not mention error behavior or response format details, but the core behavioral traits are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: main action, then return contents, then default behavior, then rationale. Every sentence adds value and there is no filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter, the description is nearly complete. It explains what the run contains, the default behavior, and why it reads from the log. It could go slightly deeper on the exact event shape, but the absence of an output schema is mitigated by the high-level return description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single run_id parameter already explains that it comes from check, fix, or call_provider_tool, and that omission means newest run. The tool description restates the default but adds no new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Read a run back without waiting on it', and explains the tool returns ordered events. It is distinct from siblings like check or fix because it is explicitly a non-blocking read of a previous run, though it does not name a specific sibling to differentiate from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong context: reads progress from the run log rather than holding a call open, and defaults to the newest run. It implies this should be used after check or fix when a long-running operation has been kicked off, but it does not explicitly name alternatives or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_clientsA

List every client and what each one can actually reach.

Returns one row per client with their domain, stored (every provider with a credential filed), api_key and mcp_session saying which store each came from, and connected, needs_login and unreachable from asking each provider live. Pass check=false to skip the live probes and report only what is stored, which is instant.

Use client_status for one client in the same shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
checkNoAsk each provider whether the session still opens. False reports only what is stored, which is instant.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It explains that the tool performs live provider probes, can be short-circuited with check=false, and returns a mix of stored and live status fields. This is substantive behavioral context beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the core purpose, the return shape, the optional parameter behavior, and the sibling alternative. The description is well-structured, front-loaded, and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and there is only one optional parameter, the description fully covers what the agent needs: scope, return semantics, live vs. stored modes, and the single-client alternative. Nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the check parameter with 100% coverage, so the baseline is 3. The description restates the same behavior without adding new semantic meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List every client and what each one can actually reach.' It immediately differentiates itself from the sibling client_status, so an agent can tell exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly directs the agent to use client_status for a single client and explains the behavioral choice between live checks and check=false. It does not discuss every sibling alternative, but it gives clear routing for the most relevant one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_provider_toolsA

List the tools this client's account with this provider actually publishes.

Returns each tool's name, description, argument schema, and whether the provider marks it read-only. read_only is what the provider says about its own tool; null means it said nothing, and it is reported rather than enforced.

Read this before call_provider_tool, which invokes one of them. Start with names_only, which returns names and read-only flags alone: for Resend that is 2KB against 122KB, and the full listing has exceeded a caller's response limit outright. matching filters on the name, the description and the argument schema, so "which tools take a teamId" is answerable.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
matchingNoOnly tools whose name, description or argument schema contains this. Searching the schema is how you find every tool that takes a teamId.
providerYesThe provider to use, for example cloudflare, vercel or resend. Only what this client is actually connected to is reachable.
names_onlyNoReturn names and read-only flags only. Resend publishes 121KB of schemas and 2KB of names.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It reveals the return fields, explains that `read_only` is reported not enforced, and warns about response size limits, recommending `names_only` as a workaround. It does not cover authentication or error conditions, but for a listing tool that is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into clear sections: purpose, return details, and usage guidance. Every sentence contributes useful information—no filler. It is slightly long but efficiently structured with line breaks for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters and no output schema, the description explains what is returned, how to filter, and how to avoid response limits. It covers the key behaviors an agent needs to call correctly, though it does not detail error handling or authentication. Overall, it is sufficiently complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema already describes each parameter, the description adds valuable context: `names_only` is optimized to reduce payload (2KB vs 122KB for Resend) and `matching` searches across name, description, and schema to answer questions like 'which tools take a teamId'. This enriches the parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists the tools a client's account with a provider publishes. It explicitly distinguishes from sibling `call_provider_tool` by saying to read this before invoking that one, and contrasts with other siblings like `call_provider_api` by focusing on tool listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: read this before `call_provider_tool`, use `names_only` for lightweight calls, and use `matching` for filtering. It clearly identifies when to use this tool versus alternatives and even gives size-based rationale.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_mail_setupA

Work out what setting up email for this client's domain would change.

Returns a plan_id and every record that would be created or replaced, each with its current published value beside the proposed one, and a count of how many need a person to approve them. Touches no client DNS.

One honest note: planning creates the sending domain in your own Resend account, because Resend publishes no DKIM values until the domain exists. Pass the plan_id to apply_mail_setup to carry it out, or use fix, which plans and applies in one call and stops for approval in between.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
domainYesThe domain to send mail from, for example acme.example. Uses the client's registered domain when omitted.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and it does so thoroughly: it discloses a non-obvious side effect ('planning creates the sending domain in your own Resend account'), reassures that client DNS is untouched, and describes the return payload (plan_id, records with current/proposed values, approval count). No behavior is hidden or misrepresented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five sentences, each adding essential information: purpose, output, safety, side-effect disclosure, and routing to alternatives. It is front-loaded with the main purpose and uses minimal words to convey a complex behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a planning tool with no output schema, the description fully covers what the agent needs: the output structure, the side effect, the safe nature, and how to proceed afterward. There are no critical gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with detailed descriptions for both parameters (client and domain), so the baseline is 3. The tool description adds no extra parameter-specific meaning beyond the schema, which is acceptable given the schema's quality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('work out') and a clear resource ('what setting up email for this client's domain would change'), and immediately distinguishes itself from siblings by naming apply_mail_setup and fix. It leaves no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent when to use this tool versus alternatives: 'Pass the plan_id to apply_mail_setup to carry it out, or use fix, which plans and applies in one call and stops for approval in between.' It also notes the safe nature ('Touches no client DNS') which guides risk-aware usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

work_on_clientA

Carry out a request inside one named client's provider accounts.

Returns what was done in the agent's own words, and which providers it had available. Every change is written to the run log as it happens, so launch_status reads it back.

The agent is built with only this client's sessions, so a request needing a second account has nothing to reach with. Use ask_across_clients to read across every client instead, and fix when the job is repairing DNS or mail, which is deterministic and stops for a person before replacing a record somebody published.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYesThe client to act on, by the name you registered them under. A write resolves this one client's credentials and no other.
requestYesWhat to do, in plain English, for example add a TXT record for domain verification. The agent uses only this client's provider tools.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It covers what is returned, that changes are logged incrementally and readable via launch_status, and the limitation that the agent only has this client's sessions. It does not explicitly warn about irreversibility, but the write/change language is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs front-load the purpose, then add return/log behavior and routing guidance. Every sentence carries distinct information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool returns, how changes are recorded, and which sibling to use instead. It lacks only an explicit statement of prerequisites or safety caveats for arbitrary write requests, which is a minor gap given the schema and routing details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains both parameters, including a request example and scoping to one client's credentials. The description reinforces the one-client scope but adds little new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Carry out a request inside one named client's provider accounts.' It also differentiates itself from siblings by naming ask_across_clients and fix and by stating the one-client scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when not to use it: 'a request needing a second account has nothing to reach with,' and points to ask_across_clients for cross-client reads and fix for DNS/mail repairs. This gives an agent clear routing criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.5.0
    • Changedadd_client2 fields changed
      • addedInput schema / properties / domain / description
        Added value: +"Their primary domain, if you know it. It can be added later by naming it in a check."
      • addedInput schema / properties / name / description
        Added value: +"What you call this client, for example Acme Ltd. Used in tool names, so two clients cannot differ only by punctuation."
    • Changedapply_mail_setup3 fields changed
      • addedInput schema / properties / approved / description
        Added value: +"Required only when the plan would replace a record that already exists. That is the client's decision, so show them the plan before setting this."
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / plan_id / description
        Added value: +"The plan_id that plan_mail_setup returned. A plan made for a different client is refused."
    • Changedask_across_clients1 field changed
      • addedInput schema / properties / question / description
        Added value: +"A question in plain English about every client at once, for example which of my clients has no DMARC policy."
    • Changedaudit_all_clients1 field changed
      • addedInput schema / properties / dkim_selector / description
        Added value: +"The DKIM selector to look for. Change it only if the client sends through something other than Resend."
    • Changedcall_provider_api6 fields changed
      • addedInput schema / properties / body / description
        Added value: +"JSON request body, as an object."
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / method / description
        Added value: +"GET, POST, PATCH, PUT or DELETE. Every call is recorded as a mutation whatever the method, because an HTTP verb is a convention rather than a guarantee."
      • addedInput schema / properties / path / description
        Added value: +"A path beginning with one slash, for example /v9/projects. Never a full URL: an absolute URL is refused before the request is built, because it would send this client's credential to another host."
      • addedInput schema / properties / provider / description
        Added value: +"cloudflare, vercel or resend. Only these three have a known REST base URL and header shape."
      • addedInput schema / properties / query / description
        Added value: +"Query string parameters, as an object."
    • Changedcall_provider_tool4 fields changed
      • addedInput schema / properties / arguments / description
        Added value: +"The arguments that tool declares, as an object. Read its inputSchema first rather than guessing."
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / provider / description
        Added value: +"The provider to use, for example cloudflare, vercel or resend. Only what this client is actually connected to is reachable."
      • addedInput schema / properties / tool / description
        Added value: +"The provider tool to call, named exactly as list_provider_tools reported it."
    • Changedcheck2 fields changed
      • addedInput schema / properties / dkim_selector / description
        Added value: +"The DKIM selector to look for. Change it only if the client sends through something other than Resend."
      • addedInput schema / properties / target / description
        Added value: +"A client name, or a bare domain. A domain nobody has mentioned before is registered as a new client, because a DNS lookup is public and reveals nothing."
    • Changedclient_status2 fields changed
      • addedInput schema / properties / check / description
        Added value: +"Ask each provider whether the session still opens, rather than only reporting what is stored."
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
    • Changedconnect_provider3 fields changed
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / credential / description
        Added value: +"The API key or token, pasted. It is stored and never returned by any tool."
      • addedInput schema / properties / provider / description
        Added value: +"The provider to use, for example cloudflare, vercel or resend. Only what this client is actually connected to is reachable."
    • Changedfind_across_clients1 field changed
      • addedInput schema / properties / need / description
        Added value: +"What to look for, as one of the catalogue check names, for example spf_single or dmarc_policy."
    • Addedfix
    • Changedlaunch_status1 field changed
      • addedInput schema / properties / run_id / description
        Added value: +"The run to read, as returned by check, fix or call_provider_tool. The newest run when omitted."
    • Changedlist_clients1 field changed
      • addedInput schema / properties / check / description
        Added value: +"Ask each provider whether the session still opens. False reports only what is stored, which is instant."
    • Changedlist_provider_tools4 fields changed
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / matching / description
        Added value: +"Only tools whose name, description or argument schema contains this. Searching the schema is how you find every tool that takes a teamId."
      • addedInput schema / properties / names_only / description
        Added value: +"Return names and read-only flags only. Resend publishes 121KB of schemas and 2KB of names."
      • addedInput schema / properties / provider / description
        Added value: +"The provider to use, for example cloudflare, vercel or resend. Only what this client is actually connected to is reachable."
    • Changedplan_mail_setup2 fields changed
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / domain / description
        Added value: +"The domain to send mail from, for example acme.example. Uses the client's registered domain when omitted."
    • Changedwork_on_client2 fields changed
      • addedInput schema / properties / client / description
        Added value: +"The client to act on, by the name you registered them under. A write resolves this one client's credentials and no other."
      • addedInput schema / properties / request / description
        Added value: +"What to do, in plain English, for example add a TXT record for domain verification. The agent uses only this client's provider tools."
  2. 15 tool updatesv0.4.0
    • First observedadd_client
    • First observedapply_mail_setup
    • First observedask_across_clients
    • First observedaudit_all_clients
    • First observedcall_provider_api
    • First observedcall_provider_tool
    • First observedcheck
    • First observedclient_status
    • First observedconnect_provider
    • First observedfind_across_clients
    • First observedlaunch_status
    • First observedlist_clients
    • First observedlist_provider_tools
    • First observedplan_mail_setup
    • First observedwork_on_client

TDQS

A4.4/5.0

Scored across 16 tools

Disambiguation5/5

Each tool targets a distinct operation: cross-client queries (ask_across_clients, find_across_clients, audit_all_clients), single-client actions (check, fix, client_status, work_on_client), provider interactions (list_provider_tools, call_provider_tool, call_provider_api), setup workflows (plan_mail_setup, apply_mail_setup), and client management (add_client, connect_provider). Overlapping tools are clearly differentiated by scope (all vs one client, specific check vs full catalogue, open-ended vs predefined).

Naming Consistency4/5

The vast majority of tools follow the verb_noun snake_case pattern (list_clients, find_across_clients, call_provider_tool, apply_mail_setup, etc.). The single exception is 'client_status', which uses a noun phrase instead of a verb-first format, but it is still unambiguous and consistent in style.

Tool Count5/5

16 tools is well-scoped for a client management and email/DNS configuration server. Each tool serves a distinct purpose without redundancy, covering discovery, diagnostics, remediation, provider integration, and workflow orchestration. The count is within the ideal 3-15 range (slightly above but justified by the breadth of functionality).

Completeness4/5

The tool surface covers the full lifecycle: client creation, provider connection, status checks, health audits, targeted fixes, mail setup planning and application, and run monitoring. Minor gaps exist (e.g., no explicit tool to delete a client or disconnect a provider, and no tool to list the check catalogue directly), but these are likely handled through other means and do not cause agent failures in core workflows.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Gives AI coding agents (Claude Code, Cursor, etc.) unified, secure access to dev infrastructure (Vercel, GitHub, Supabase, Cloudflare, GCP) via a single MCP token.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    One MCP that turns Claude Code into your whole dev stack by swallowing other MCP servers, delegating to Codex & Gemini on your CLI subscriptions, remembering projects in a searchable knowledge graph, and carrying setup across sessions — secret-free by design.
    23
    3
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Unified MCP server for DevOps engineers that provides real-time read and write access to Kubernetes, ArgoCD, Prometheus, and PagerDuty from any MCP-compatible AI agent.
    21
    73 npm
    3
    MIT