Skip to main content
Glama

CorroborateMe

Prove end users to agents and apps.

Remote MCP Transport Auth License: MIT Listed on mcpservers.org

CorroborateMe gives agents and apps company API keys and human login-links with multi-channel notify so they can prove who the end user is - plus OIDC client registration, integration secrets, and budget-aware billing. REST is first-class; MCP is optional.

Live endpoint: https://corroborateme.com/mcp

This repository is the public catalog and schema stub for directory crawlers. It is not the hosted server. Point MCP clients at the live URL above with a CorroborateMe API key (aa_...) or use MCP OAuth (PRM at /.well-known/oauth-protected-resource). Running the TypeScript in this repo does not authenticate users or store secrets.

Agent guide: see AGENTS.md for discovery URLs, auth, and MCP connect snippets.

Get an API key

Zero-human (agents)

  1. POST https://corroborateme.com/api/agents/bootstrap with optional { "company_name": "...", "contact_email": "agent@example.com" } -> bootstrap token (no outbound mail).

  2. POST https://corroborateme.com/api/billing/machine-pay with Authorization: Bearer <bootstrapToken> and optional { "sku": "pro_prepaid_30d" }.

  3. Settle Stripe MPP when enabled (see live GET /api/config for amounts) -> response includes secret (aa_...) when unlock succeeds.

See llms.txt and llms-full.txt. Legal: Terms · Privacy.

Human path

  1. Open corroborateme.com and create an account.

  2. Subscribe on Pricing, then mint an API key in the console. Secrets start with aa_.

  3. Use the company key for REST and MCP.

Never commit a real key. Use the aa_... placeholder in configs.

Related MCP server: AgentPay MCP Server

Connect a client

Transport is Streamable HTTP. Authenticate with either:

  • Authorization: Bearer aa_... (API key from console or bootstrap + machine-pay), or

  • MCP OAuth - host discovers PRM at /.well-known/oauth-protected-resource, registers via DCR, and obtains an access token for https://corroborateme.com/mcp

Cursor

Install via Cursor Marketplace (plugin)

This repo includes a Cursor plugin manifest and root mcp.json for one-click install from the Cursor Marketplace.

  1. Install the CorroborateMe plugin from the marketplace (or clone this repo for local plugin testing).

  2. Open Cursor Settings -> Customize -> CorroborateMe and set CorroborateMe API key (aa_... from bootstrap + machine-pay or the console).

  3. Reload the window. MCP tools should appear under the CorroborateMe server.

The plugin points at https://corroborateme.com/mcp with Authorization: Bearer ${CORROBORATE_ME_API_KEY}. Never commit a real key.

Submit the public repo at cursor.com/marketplace/publish when ready.

Manual MCP config

User or project MCP config:

{
  "mcpServers": {
    "corroborate-me": {
      "url": "https://corroborateme.com/mcp",
      "headers": {
        "Authorization": "Bearer aa_..."
      }
    }
  }
}

Claude Desktop / Claude Code

{
  "mcpServers": {
    "corroborate-me": {
      "command": "npx",
      "args": ["mcp-remote", "https://corroborateme.com/mcp", "--header", "Authorization: Bearer aa_..."]
    }
  }
}

Generic remote MCP

{
  "url": "https://corroborateme.com/mcp",
  "headers": {
    "Authorization": "Bearer aa_..."
  }
}

Discovery manifests on the product host:

Tools

Schemas in src/server.ts match the hosted server.

Tool

What it does

agent_bootstrap

Start humanless company onboarding (bootstrap token flow)

budget_get

Remaining quotas for the authenticated company

billing_checkout

Create Stripe Checkout URL for human Pro

billing_machine_pay

Agent prepaid unlock via Stripe MPP (sku optional)

billing_portal

Stripe Customer Portal URL

keys_create

Mint a new aa_ API key (shown once)

oauth_client_create

Register an OIDC relying-party client (RP logout enabled; optional post-logout URIs)

integration_upsert

Store encrypted integration secret (Google/Apple/etc.)

integration_list

List integrations (prefixes only, no secrets)

create_login_link

Mint one-time human login URL with notify methods

get_login_status

Poll login-link session status

retry_login_webhook

Retry signed webhook delivery after a failed notify

webhook_allowlist_add

Allowlist a callback URL prefix

Typical agent loop

  1. Bootstrap a company (agent_bootstrap) and unlock prepaid Pro (billing_machine_pay) when needed.

  2. Mint a key with keys_create if you need a durable aa_... secret.

  3. Allowlist callback prefixes (webhook_allowlist_add), then create_login_link for human proof.

  4. Poll with get_login_status (or wait for webhook / redirect / postMessage).

  5. Use REST or MCP for keys, OIDC clients, and integrations as needed.

Prefer live docs and llms-full.txt for recipes that may change.

Auth and errors

  • 401 - missing or invalid Authorization (API key aa_... or MCP OAuth access token)

  • 402 / 429 - plan or quota; follow machine-readable actions from the live API

  • Pricing amounts: read live GET /api/config - do not hardcode dollars as eternal truth (at time of writing: Pro $5.99/mo, agent prepaid Pro $5.99 per 30 days)

Product docs

The CorroborateMe product (Worker, billing, IdP) is closed source. This catalog is MIT-licensed so directories can list tools and install snippets.

Directory listing

Registry name: com.cnrcode/corroborateme (domain namespace via cnrcode.com).

  1. Ensure https://cnrcode.com/.well-known/mcp-registry-auth is deployed.

  2. Set GitHub repo secret MCP_PRIVATE_KEY (the existing cnrcode.com Ed25519 private key hex; never commit it).

  3. Push a version tag so GitHub Actions publishes server.json to the official MCP Registry:

    git tag v0.1.0
    git push origin v0.1.0

Directories that ingest the official registry (PulseMCP, MCPCentral, MCPFind, Glama connectors) pick the entry up from there. Other directories (Glama server listing, Smithery, mcpservers.org, mcp.directory, MCP Market, McpMux) are submitted by maintainers only. See docs/directory-listings.md.

Stdio stub (directory introspection)

This repo includes a stdio catalog stub (src/main.ts) so directories can build a container, start the process, and introspect the 13 tool definitions. It does not implement auth or billing - clients still connect to the hosted endpoint above.

Local verify:

npm ci && npm run build && npm start   # hangs on stdio - expected
docker build -t corroborate-me-stub . && docker run -i corroborate-me-stub

License

MIT - catalog, documentation, and schema stub only.

Available Tools

13 tools
agent_bootstrapCInspect

Start humanless company onboarding (returns bootstrap token flow info)

ParametersJSON Schema
NameRequiredDescriptionDefault
company_nameNo
contact_emailNo

TDQS

C2.7/5.0
Behavior2/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 behavioral disclosure. It says the tool 'starts' onboarding and returns flow information, but it does not state whether this creates records, sends emails, requires prior setup, or has side effects. This is a significant gap for a mutating bootstrap operation.

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 a single compact sentence and includes a useful parenthetical about the return value. It avoids padding, though the phrase 'bootstrap token flow info' is somewhat jargon-heavy and could be clearer.

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

Completeness2/5

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

For a mutating action with no annotations and no output schema, the description leaves out side effects, prerequisites, the return shape, and how this relates to the sibling onboarding/auth tools. An agent would have to guess several important details before invoking it.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain company_name or contact_email beyond their names. It also does not clarify whether they are required, what formats are expected, or how they are used in the onboarding flow.

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 uses a specific verb and resource: 'Start humanless company onboarding' and notes the return is 'bootstrap token flow info.' It is reasonably distinct from the billing, integration, and auth-related siblings, though it does not explicitly differentiate itself from create_login_link or get_login_status.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like create_login_link or get_login_status, and no prerequisites or exclusions are mentioned. The intended usage context is only implied by the tool name and the word 'Start.'

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

billing_checkoutBInspect

Create Stripe Checkout URL (or local bypass grant)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/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 behavioral disclosure. It states it 'creates' a URL, implying a side effect, but does not mention auth requirements, idempotency, side effects, or what the returned URL is for. The term 'local bypass grant' is unexplained, leaving significant behavioral ambiguity.

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 a single, front-loaded sentence with no fluff. It states the action and a parenthetical alternative in a compact form. Every word earns its place.

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

Completeness2/5

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

For a tool with no parameters, no output schema, and no annotations, the description is too terse to be complete. It does not explain what the returned URL is for, what 'local bypass grant' means, or whether authentication is needed. The ambiguity is especially problematic for a billing-related action.

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?

There are zero parameters, and the schema is empty (100% coverage by default). The description adds no parameter information, but per the rubric, 0 parameters warrants a baseline of 4. Nothing is missing.

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: 'Create Stripe Checkout URL'. This differentiates it from siblings like billing_portal (customer portal) and billing_machine_pay (payment action). However, the parenthetical '(or local bypass grant)' introduces ambiguity without further explanation, so it's not a 5.

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

Usage Guidelines2/5

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

No explicit guidance is given for when to use this tool versus alternatives. The description does not mention conditions, prerequisites, or situations where billing_portal or billing_machine_pay would be more appropriate. Usage must be inferred from the name and context, which is insufficient.

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

billing_machine_payDInspect

Agent prepaid unlock when MPP enabled / local bypass

ParametersJSON Schema
NameRequiredDescriptionDefault
skuNo

TDQS

D1.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior, but it only offers cryptic hints: it says 'unlock' and 'bypass' without explaining side effects, prerequisites, idempotency, or what actually happens when invoked. This is not enough for an agent to anticipate the tool's real-world impact.

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

Conciseness2/5

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

The description is short, but the brevity is the result of under-specification rather than effective conciseness. It is a fragment with a slash-separated condition and no sentence structure, making it harder to parse rather than easier.

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

Completeness1/5

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

The description is inadequate for a tool with no annotations and no output schema. Key terms ('MPP', 'local bypass'), the role of sku, the meaning of 'prepaid unlock', and the relationship to the sibling tools are all left unexplained.

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

Parameters1/5

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

The only parameter, sku, has no schema description and is never mentioned in the tool description. With schema description coverage at 0%, the description was expected to clarify how to populate sku, but it provides nothing whatsoever.

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

Purpose2/5

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

The description hints at an unlock action for an 'agent prepaid' state, but it is phrased as a fragment ('Agent prepaid unlock when MPP enabled / local bypass') rather than a clear statement of what the tool does. The terms 'MPP' and 'local bypass' are undefined, and the description does not distinguish this tool from the billing-related siblings like billing_checkout or billing_portal.

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

Usage Guidelines2/5

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

The phrase 'when MPP enabled / local bypass' suggests some conditional context, but it is not explained and no alternatives are mentioned. There is no guidance about when to choose this tool over the sibling billing tools or how to handle the two listed conditions.

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

billing_portalDInspect

Stripe Customer Portal URL

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.8/5.0
Behavior1/5

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

No annotations are provided, so the description must disclose behavior. It does not state whether this is a read-only operation, whether it requires authentication, or whether it has side effects such as generating a session. The terse phrase offers no behavioral context.

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

Conciseness2/5

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

The description is extremely short, but this is under-specification rather than efficient conciseness. It is front-loaded but lacks the substance needed for a tool whose purpose is not self-evident from the name alone.

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

Completeness1/5

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

There is no output schema, no parameter details, and the description provides no information about return values, expected inputs, or preconditions. Given the ambiguity and lack of annotations, this is completely inadequate for an agent to call the tool correctly.

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 tool has zero parameters, so the schema fully covers parameter semantics (coverage 100%). Baseline for 0 params is 4, and the description does not need to explain parameters that do not exist. No value is added, but none is required.

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

Purpose2/5

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

The description is a noun phrase, 'Stripe Customer Portal URL', with no verb or action stated. It does not clarify whether this tool creates, retrieves, or generates a portal URL. Sibling tools like create_login_link and billing_checkout suggest related functionality, but without a verb the purpose remains ambiguous.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives. Among siblings such as billing_checkout, billing_machine_pay, and create_login_link, there is no indication of which scenario this tool addresses, leaving the agent to guess.

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

budget_getBInspect

Remaining quotas for the authenticated company

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations are absent, so the description carries the behavioral disclosure burden. It conveys that the result reflects remaining quota state but says nothing about whether the call is read-only, whether values are cached or live, what authentication is needed, or what the response contains.

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 six words with no filler and the key scope is front-loaded. It is a phrase rather than a full sentence, but for a parameterless getter this brevity is appropriate.

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

Completeness3/5

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

For a no-input quota check the description is minimally usable, but it leaves ambiguity about what kind of quotas are meant (API usage, billing budget) and how they are represented. With no output schema and no annotations, a bit more context would make it complete.

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 tool has zero parameters and schema coverage is trivially 100%, so there is nothing for the description to add about parameters. A score of 4 reflects the no-parameter baseline.

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 phrase identifies the resource (remaining quotas) and the scope (authenticated company), so an agent can tell what data is returned. It omits an explicit verb and does not contrast with sibling billing/integration tools, so it stops short of full differentiation.

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

Usage Guidelines2/5

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

No guidance is given on when to call this versus siblings like billing_portal or integration_list, and no prerequisites or exclusions are stated. The implied company scope is not enough to route an agent's decision.

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

get_login_statusAInspect

Poll login-link session status (includes notify errors)

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses that the tool polls and that notify errors are included, but it does not clarify whether polling is side-effect-free, whether it consumes the session, or what 'notify errors' actually means.

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?

Single concise sentence with the core action front-loaded and no filler. The parenthetical adds one meaningful detail without bloating the text.

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

Completeness2/5

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

There is no output schema and no annotations, so the description should explain what statuses are returned and how to interpret them. It only mentions notify errors, leaving the caller without enough information to fully understand the response.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not explain session_id. The parameter name and the 'login-link session' context give some implicit meaning, but the description adds no format, provenance, or usage detail for the required parameter.

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 ('Poll') and resource ('login-link session status'), and adds a distinguishing detail ('includes notify errors'). This separates it clearly from siblings like create_login_link and retry_login_webhook.

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

Usage Guidelines3/5

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

Polling is an implied usage context (checking status after a login link is created), but the description does not explicitly state when to use it versus retry_login_webhook or create_login_link, nor does it mention any exclusions.

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

integration_listAInspect

List integrations (prefixes only, no secrets)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations available, the description carries the full burden. It does disclose a meaningful behavioral trait — only prefixes are returned and secrets are never exposed — which is valuable. However, it says nothing about read-only guarantees, authentication needs, pagination, rate limits, or error behavior.

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 a single tightly-worded sentence with no filler. The parenthetical adds critical scoping information without bloating the text.

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 zero-parameter, simple list operation with no output schema, the description covers the most important missing context: the result is a list of prefixes, not full integration data or secrets. It omits minor details such as response format and pagination, but these are unlikely to block correct invocation.

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 tool has zero parameters, so the schema has nothing to document. The description correctly focuses on the output shape instead, which is the only semantically relevant information for calling this tool.

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 ('List') and resource ('integrations'), and the parenthetical 'prefixes only, no secrets' clarifies exactly what kind of data is returned. This makes it easy to distinguish from sibling tools like integration_upsert, which imply mutation.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives, nor are any exclusions or preconditions stated. An agent is left to infer that listing is the right first step before upserting or creating integrations.

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

integration_upsertCInspect

Store encrypted integration secret (Google/Apple/etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
secretYes
providerYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits itself. It states the secret is encrypted, but it does not explain whether the operation is idempotent, whether existing secrets are overwritten, what happens if the provider already exists, or if any authentication is required. For a mutation tool with no annotation coverage, this is a significant transparency gap.

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 a single sentence, highly concise and front-loaded with the core action. There is no wasted wording. However, its brevity sacrifices necessary detail, so it is efficient but not fully structured for utility. It earns a high score for conciseness alone, but not for completeness.

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

Completeness1/5

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

Given the tool has 3 parameters (2 required), no annotations, no output schema, and no parameter coverage in the description, the description is far from complete. It lacks critical information about parameter semantics, upsert behavior, potential side effects, and expected outcomes. An agent would not have enough context to safely and correctly invoke this tool.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate by explaining the parameters. It does not mention 'provider', 'secret', or 'label' at all. It gives examples of provider values (Google/Apple) but does not clarify the meaning of 'label' or the expected format of 'secret'. The description adds no semantic value beyond the raw schema, which is inadequate given the complete lack of parameter documentation.

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 clearly states the tool's core action: storing an encrypted integration secret, with examples of providers (Google/Apple). It distinguishes from siblings like integration_list (which lists integrations) and others. However, it does not explicitly mention the 'upsert' semantics (create-or-update), which is implied by the tool name but not stated in the description, leaving slight ambiguity.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., whether an OAuth client must exist), nor does it indicate any conditions for calling it. There is no mention of when to use integration_upsert vs. integration_list or other integration-related tools.

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

keys_createBInspect

Mint a new aa_ API key (shown once)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It notably discloses that the key is shown only once, a crucial behavioral trait that the agent must know. However, it does not mention authorization requirements, side effects on existing keys, or any rate limits, so it only partially covers the behavioral spectrum.

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 a single, focused sentence of 8 words. The core purpose is front-loaded, and every word contributes meaning. There is no redundancy or filler.

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

Completeness2/5

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

The tool is simple, but the description is incomplete. It lacks any explanation of the 'name' parameter, so the agent cannot confidently decide whether or how to populate it. Without an output schema, the agent also does not know what the tool returns. The 'shown once' note is helpful but not enough for full operational clarity.

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

Parameters1/5

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

The schema has one optional 'name' parameter with zero description coverage. The tool description does not mention this parameter at all, so it adds no meaning beyond the schema. An agent has no idea what 'name' represents, how to format it, or whether to include 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 action ('Mint a new aa_ API key') with a specific verb and resource. The 'shown once' detail adds a distinct characteristic that separates it from sibling tools like oauth_client_create or create_login_link. An agent would immediately understand this tool creates an API key with a specific prefix.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the sibling tools, when not to use it, or any prerequisites. The description only states what the tool does, leaving the agent to infer the appropriate context on its own.

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

oauth_client_createAInspect

Register an OIDC relying-party client (enableEndSession on; post-logout URIs default from redirect origins)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
public_clientNo
redirect_urisYes
post_logout_redirect_urisNo

TDQS

A3.7/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 explicitly discloses two behavior defaults: enableEndSession is on, and post-logout URIs derive from redirect origins. This adds value beyond the schema. However, it does not mention authentication requirements, idempotency, or error behavior, so it's not fully transparent, but for a registration tool the key defaults are 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 a single sentence with no filler. It front-loads the core purpose ('Register an OIDC relying-party client') and then adds two concise behavioral notes. Every word contributes to understanding, achieving high density without verbosity.

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

Completeness2/5

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

There is no output schema and no annotations, so the description must fully equip the agent to call the tool correctly. It lacks information about return values, error handling, idempotency, or what happens on duplicate names. It also doesn't mention required permissions. For a tool with 4 parameters and no other structured metadata, this is a significant gap, leaving the agent with many unanswered questions.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description compensates for parameter explanation. It only refers to post_logout_redirect_uris (default from redirect origins) and implicitly to redirect_uris, but it does not explain 'name' or 'public_client' at all. The agent would have to infer their meaning solely from the schema, which is insufficient for a low-coverage case. The description adds minimal semantic 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 states a specific verb 'Register' and a specific resource 'OIDC relying-party client', which clearly distinguishes it from sibling tools like create_login_link or keys_create. It also mentions two specific behaviors (enableEndSession on, post-logout URIs default from redirect origins) that add precision, making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies the tool is for registering an OIDC client, which is a distinct purpose among the siblings, but it does not explicitly state when to use this over alternatives or any exclusions. For example, it doesn't say 'use this when you need a new OAuth client' or mention webhook_allowlist_add or integration_upsert as alternatives. The context is clear but not directly tied to decision-making.

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

retry_login_webhookCInspect

Retry signed webhook delivery after a failed notify

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions 'signed webhook delivery' and 'retry', but doesn't explain what happens on retry—does it re-send only failed events or all? Are there rate limits or idempotency concerns? It doesn't state what happens to the session or whether it requires authentication. The description is too minimal to cover the safety profile for a retry action.

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 concise—a single phrase—and front-loaded with the core action. However, it's so brief that it borders on under-specification; while it earns points for brevity, the ambiguity of 'notify' and missing details prevent a perfect score. It's not bloated, but it lacks clarity.

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

Completeness2/5

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

For a tool with one required parameter and no output schema, the description is incomplete. It doesn't explain the parameter's meaning, the exact conditions for retry (what constitutes a 'failed notify'), or any side effects. This is a relatively simple tool, but the description leaves too much to inference. Given the siblings (e.g., webhook_allowlist_add), the description doesn't distinguish the retry mechanism.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the meaning of the single parameter 'session_id'. The schema only indicates it's a string, but the description adds no context about what the session represents (e.g., a login session identifier) or how it relates to the retry. This is a significant gap because the parameter is required and the description offers no guidance.

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

Purpose3/5

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

The description states a specific verb ('Retry') and resource ('signed webhook delivery'), clarifying what it does. However, 'after a failed notify' introduces ambiguity—what is a 'notify'? It doesn't clearly distinguish this tool from siblings like webhook_allowlist_add, but the action is clear enough. The tautology risk is low because the description conveys the purpose, but it's not specific about the notification context.

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

Usage Guidelines2/5

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

The description implies usage: retry after a failed notify. However, it provides no explicit guidance on when to use this tool versus alternatives, or when not to use it. There's no mention of prerequisites, such as whether the webhook is signed or if a session exists. The context of 'failed notify' is vague, leaving the agent to infer the trigger condition.

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

webhook_allowlist_addAInspect

Allowlist a callback URL prefix (https webhooks/redirects or cursor:// deep links)

ParametersJSON Schema
NameRequiredDescriptionDefault
url_prefixYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits, but it only states the verb 'allowlist'. It does not mention whether the operation is idempotent, reversible, requires special permissions, or has side effects like modifying persistent configuration. The description is too minimal to give the agent confidence in the tool's behavior.

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 a single, efficient sentence with no unnecessary words. The action and resource are front-loaded, and the parenthetical example adds clarity without bloating the text.

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

Completeness3/5

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

For a simple one-parameter tool with no output schema, the description provides the core purpose and parameter format. However, it lacks information about the effect of the operation, whether it can be safely repeated, or any error conditions. Given the simplicity, it is adequate but could be more complete.

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 schema only defines 'url_prefix' as a string with no description, so the description is essential. It adds meaning by specifying that the value is a URL prefix and gives acceptable schemes (https webhooks/redirects or cursor:// deep links). This goes beyond the schema and clarifies the expected format and scope.

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 ('Allowlist') and the resource ('a callback URL prefix'), and it provides concrete examples of valid URL schemes (https webhooks/redirects or cursor:// deep links). This makes the tool's purpose immediately understandable and distinct from sibling tools that handle login, billing, or integration management.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or other tools to consider. The only context is the action itself, which implies usage for allowlisting URL prefixes, but there is no explicit routing or conditional guidance.

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. 13 tool updatesv0.1.0
    • First observedagent_bootstrap
    • First observedbilling_checkout
    • First observedbilling_machine_pay
    • First observedbilling_portal
    • First observedbudget_get
    • First observedcreate_login_link
    • First observedget_login_status
    • First observedintegration_list
    • First observedintegration_upsert
    • First observedkeys_create
    • First observedoauth_client_create
    • First observedretry_login_webhook
    • First observedwebhook_allowlist_add

TDQS

B3/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource and action: login lifecycle, webhook management, integrations, billing, keys, and OAuth. Even related tools like get_login_status and retry_login_webhook serve clearly different purposes (status check vs. retry), so there is no realistic ambiguity.

Naming Consistency3/5

All names are snake_case, but the verb/noun order is inconsistent—some are verb-first (create_login_link, get_login_status) while others are noun-first (budget_get, keys_create, integration_list). This mixed convention reduces predictability, though the names remain readable and self-explanatory.

Tool Count5/5

13 tools is well within the ideal 3-15 range for a server with this breadth (authentication, billing, integrations, key management, OAuth). Each tool appears justified and none feel redundant or superfluous for the scope.

Completeness3/5

The tool surface covers core creation and retrieval workflows (create/login status, keys_create, billing_checkout), but lacks lifecycle operations such as revoking keys, deleting OAuth clients, or removing webhook allowlist entries. These gaps could force agents to hit dead ends in real-world scenarios.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides identity infrastructure for AI agents to manage email communications, including sending, replying, and organizing messages. It also includes a secure vault for managing credentials and generating TOTP codes.
    4 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides a trust and governance layer for AI agents, enabling secure API access, credential vaulting, paid execution with human approval, and automatic call resume.
    6 npm
    2
    -
  • A
    license
    A
    quality
    B
    maintenance
    Identity and credential governance for AI agents. Every agent gets its own cryptographic identity, scoped short-lived credentials per platform, human approval on sensitive actions, and an immutable audit log.
    7
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with a DID-based identity, secure wallet, and cloud KMS-backed signing keys, enabling trusted interactions with persons, companies, and other agents via standards like OIDC4VCI, OIDC4VP, and SD-JWT.
    Apache 2.0