Skip to main content
Glama

CorroborateMe

Server Details

Prove end users to agents and apps: login-links, OIDC clients, and API keys over remote MCP

Ownership verified
Status
Healthy
Uptime
81.7% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
CNR-Consulting/corroborate-me
GitHub Stars
1
Server Listing
CorroborateMe

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct resources and phases (bootstrap, billing, login-link session, integrations, keys, OIDC, webhooks). The three billing tools (billing_checkout, billing_machine_pay, billing_portal) overlap conceptually, but each description explicitly states what it does NOT do and points to the right sibling, so selection is usually clear.

Naming Consistency3/5

All names are snake_case with recognizable resource prefixes (billing_*, integration_*, oauth_client_*), which aids scanning. However verb placement is inconsistent: some are verb-first (create_login_link, get_login_status, retry_login_webhook) while others are noun-first (integration_upsert, keys_create, billing_checkout, budget_get).

Tool Count4/5

13 tools is well within a reasonable range and the surface maps to clear workflow areas: onboarding, billing, authentication/login links, integrations, and credentials. Each tool appears to earn its place, with only mild fragmentation across the login-link and webhook helpers.

Completeness3/5

The surface covers onboarding, billing, login, integrations, keys, and OIDC creation, but lifecycle coverage is asymmetric: keys_create and oauth_client_create have no corresponding revoke/delete or list operations, and integration_upsert has list but no delete. These gaps could leave agents unable to clean up or audit credentials and clients.

Available Tools

14 tools
agent_bootstrapA
Read-onlyIdempotent
Inspect

Show how to start zero-human company onboarding. This call does not create a company, send email, or mint a bootstrap token or an aa_ key. MCP requires a company API key (aa_...) or an MCP OAuth access token before any tool runs. Returns message, path (/api/agents/bootstrap), body (company_name and contact_email echoed), product, and keyPrefix. The unauthenticated REST POST to that path returns bootstrapToken, expiresIn 900 (about 15 minutes), and next billing paths, and it does not mint the aa_ key. After that REST call, POST /api/billing/machine-pay with the bootstrap token for an agent prepaid unlock, or POST /api/billing/checkout when a human will pay in the browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
company_nameNoOptional display name echoed in body for POST /api/agents/bootstrap. This tool does not store it.
contact_emailNoOptional contact email echoed in body. No message is sent.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description builds on them by enumerating the side effects it explicitly avoids (no company creation, no email sent, no bootstrap token or aa_ key minted) and by naming the auth requirement. It also discloses the return payload (message, path, body echo, product, keyPrefix) and the REST token's 900-second expiry, which is meaningful context absent an output schema.

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 denial-of-side-effects and the auth prerequisite are front-loaded before the return shape and the downstream REST options, which is good ordering. The passage is dense with a lot of REST detail, but nearly every clause (auth, negations, return fields, expiry, next steps) carries distinct information rather than repeating structured data.

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 zero-side-effect informational tool with no output schema, the description covers everything an agent needs: what it does and explicitly does not do, the auth precondition, the returned fields, and the follow-on REST calls with their selecting conditions. Nothing needed 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 both params are optional, so the schema already carries the semantics; the description only restates that company_name and contact_email are echoed in the body and not stored, mirroring the schema text. Baseline 3 applies since the description adds nothing beyond the structured field 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 states a specific action (show how to start zero-human company onboarding) and immediately bounds it with three negations (does not create a company, send email, or mint tokens). It is distinguishable from siblings like billing_checkout because it positions itself as the pre-onboarding informational step, though it never explicitly contrasts itself with an MCP sibling tool.

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 real routing guidance: it states the auth prerequisite (aa_ key or OAuth token) 'before any tool runs,' and it names the downstream alternatives POST /api/billing/machine-pay (agent prepaid unlock) versus POST /api/billing/checkout (human pays in browser) with the condition that selects each. It stops short of explicitly telling the agent when to call this tool instead of the billing_* MCP siblings.

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

billing_checkoutInspect

Create a Stripe Checkout session for the authenticated company so a human can subscribe to Pro, monthly or yearly (optional interval month or year). Requires a company API key (aa_...) or an MCP OAuth access token. It does not accept a console session or a bootstrap token, and it does not mint a company or an aa_ secret. Returns url. Creating the session does not charge a card; the human pays on the Stripe page. When local billing bypass is enabled, there is no Stripe call and no charge: Pro is granted immediately with no period end, and url is the console success URL (/console?billing=ok), not a Stripe Checkout URL. If Stripe is not configured and bypass is off, the JSON includes error stripe_not_configured. For prepaid purchase instructions, use billing_machine_pay. To manage an existing subscription, use billing_portal.

ParametersJSON Schema
NameRequiredDescriptionDefault
intervalNomonth for $5.99 a month (default), year for $55 a year.
billing_machine_payA
Read-onlyIdempotent
Inspect

Return prepaid Pro purchase instructions. This tool does not charge a card, grant Pro, or return an aa_ secret. MCP requires a company API key (aa_...) or an MCP OAuth access token; a bootstrap token is not accepted on this call. Optional sku defaults to pro_prepaid_30d. On success, returns sku, amount (the live price), currency, periodDays, mppConfigured, action (POST /api/billing/machine-pay), agentSkus, and instructions. If MPP is not configured and local billing bypass is off, returns an error with code mpp_not_configured and does not grant Pro. An unknown sku returns invalid_sku. The REST POST /api/billing/machine-pay is what charges or grants: with MPP enabled it starts a prepaid charge and, only when the caller used a bootstrap token and the company has no API key yet, returns secret (aa_..., shown once) after settlement. With local billing bypass and MPP off, that REST call grants Pro for the SKU period with no Stripe charge and may return the same secret on the bootstrap path. Use billing_checkout for a human Stripe Checkout session.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuNoOptional prepaid plan id. When omitted, the server uses pro_prepaid_30d. That is the only accepted SKU. The tool response includes the live amount.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this readOnly/idempotent/non-destructive, and the description reinforces that with explicit negative guarantees (does not charge, grant Pro, or return a secret) plus failure modes (mpp_not_configured, invalid_sku) and their consequences. It also disambiguates this MCP call from the REST POST that actually charges/grants, which is rich context beyond the annotations.

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 action is front-loaded and every sentence carries information, but the extended passage on the REST /api/billing/machine-pay charge/grant semantics is dense and goes beyond what is needed to select one tool. It is efficient but not maximally tight.

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 enumerates the return fields (sku, amount, currency, periodDays, mppConfigured, action, agentSkus, instructions) and documents auth requirements and both error paths. An agent has everything needed to invoke it correctly.

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% for the single sku parameter and already documents the pro_prepaid_30d default and that it is the only accepted SKU, which the description largely restates. The description adds only the invalid_sku error outcome, a behavioral rather than semantic addition, so the 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 description opens with a specific verb+resource ('Return prepaid Pro purchase instructions') and immediately scopes what the tool does NOT do (no charge, no grant, no secret). It then contrasts sharply with the REST POST endpoint and with billing_checkout, so an agent can place it against siblings without opening a schema.

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 states the required auth ('a company API key (aa_...) or an MCP OAuth access token; a bootstrap token is not accepted on this call') and names the alternative explicitly ('Use billing_checkout for a human Stripe Checkout session'). When-to-use and when-not-to-use are both covered.

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

billing_portalAInspect

Create a billing portal URL for the authenticated company. Use this when a human needs to update a payment method, view invoices, or change an existing subscription. Requires a company API key (aa_...) or an MCP OAuth access token. Returns url when Stripe is configured and the company has a Stripe customer. The call itself does not change the plan or charge a card. When local billing bypass is enabled, Stripe is not called and url is the console URL. If Stripe is not configured or the company has no Stripe customer, the JSON includes error stripe_not_configured. To buy Pro, use billing_checkout. billing_machine_pay only returns prepaid REST instructions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare openWorldHint=true and readOnlyHint=false, but the description adds substantial context: required API key/OAuth token, that the call does not change the plan or charge a card, that local billing bypass skips Stripe and returns the console URL, and the stripe_not_configured error condition. This goes well beyond the annotation surface.

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?

Six sentences, each carrying distinct load: purpose, usage, auth, return value, non-mutation caveat, bypass behavior, error mode, and sibling routing. Purpose is front-loaded and there is 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?

With no output schema, the description correctly covers the return contract (url on success, stripe_not_configured error) and the environment-dependent variation. Auth, error modes, and side-effect scope are all present, so nothing needed to call it correctly is missing.

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 takes zero parameters, so the baseline is 4 and there is nothing for the description to document. Auth requirements are mentioned, but that is behavioral rather than parameter semantics.

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?

Opens with a specific verb+resource ("Create a billing portal URL") scoped to "the authenticated company." It also explicitly distinguishes itself from siblings by naming billing_checkout and billing_machine_pay, so an agent can route correctly without opening other 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?

Gives concrete when-to-use criteria (human needs to update payment method, view invoices, or change subscription) and explicit alternative routing ("To buy Pro, use billing_checkout" and what billing_machine_pay actually returns). Both the trigger and the exclusions are stated.

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

budget_get
Read-onlyIdempotent
Inspect

Read remaining quotas and plan entitlement for the authenticated company. Call this when you need to know whether an active plan is in effect before registering OIDC clients or creating login links. Creating login links, minting extra API keys, and registering end users all require an active plan (the bootstrap key does not). Requires a company API key (aa_...) or an MCP OAuth access token. Returns planId, planStatus, periodYm, included, used, remaining, and hardCap. It does not change billing or charge a card. To start a human Pro checkout, use billing_checkout. billing_machine_pay only returns prepaid REST instructions. To manage an existing Stripe subscription, use billing_portal.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

get_login_statusA
Read-onlyIdempotent
Inspect

Poll one login-link session until the human finishes, and read any notify errors. Use this after create_login_link, passing that call's sessionId as session_id. Requires a company API key (aa_...) or an MCP OAuth access token. Returns id, status, state, user_id, email, claims, expires_at, completed_at, force_reauth, reuse_session, methods, notify_result, errors, poll, sse, and events_url. status is pending, completed, consumed, or expired. There is no done status. user_id (cu_...) and email are present when the person has finished and null while pending. A missing session returns null. It does not send a new notification. If webhook delivery failed, call retry_login_webhook.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYessessionId returned by create_login_link.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations it discloses auth requirements (aa_ key or MCP OAuth token), the full status vocabulary and the fact there is no 'done' status, null return for a missing session, and that user_id/email are null until completion. This is substantive behavioral context the annotations cannot convey.

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?

Purpose and sequencing are front-loaded, and the enumeration of return fields is justified by the absence of an output schema. It is dense and runs long, but nearly every clause carries information the agent needs; only the field list slightly overlaps schema-level concerns.

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?

With no output schema, the description carries the full burden of describing return values and does so: it lists the returned fields, enumerates status values, explains null semantics and the missing-session case, and names the follow-up tool for webhook failures. Nothing needed to call 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 there is one parameter, so the schema already documents session_id. The description restates its provenance ('passing that call's sessionId') but adds no syntax or format detail beyond the schema, so the baseline applies.

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?

States a specific verb and resource ('Poll one login-link session until the human finishes') and immediately scopes it against siblings by tying it to create_login_link and retry_login_webhook. An agent can distinguish it from the other login tools without opening a schema.

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 sequencing ('Use this after create_login_link, passing that call's sessionId'), plus an exclusion routing to retry_login_webhook when webhook delivery failed and a clarification that it does not send a new notification. When-to-use and when-to-use-something-else are both covered.

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

integration_listA
Read-onlyIdempotent
Inspect

List this company's stored integrations. Use this to see which providers are configured before calling integration_upsert. Requires a company API key (aa_...) or an MCP OAuth access token. Returns a JSON array of id, provider, label, secret_prefix, meta, created_at, and rotated_at. Full secrets are never included. The call does not modify stored secrets.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), but the description adds material context beyond them: the auth requirement (company API key aa_... or MCP OAuth token) and the secret-handling guarantee that full secrets are never returned. That is genuine value not present in structured fields.

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?

Four short sentences, front-loaded with the core action before the usage hint and return details. Slightly redundant in restating the non-mutation guarantee already implied by readOnlyHint, but nothing is wasted.

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?

With no output schema, the description usefully enumerates the returned fields (id, provider, label, secret_prefix, meta, created_at, rotated_at) and the security caveat. Combined with the stated auth requirement, an agent has everything needed to call and interpret the 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?

The tool takes zero parameters, so the schema has nothing to document and there is no parameter semantics to add. The description correctly stays silent on parameters rather than padding.

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?

States a specific verb and resource ('List this company's stored integrations') and immediately distinguishes itself from the sibling write operation integration_upsert. An agent can tell what this 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 Guidelines5/5

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

Explicitly frames the use case ('see which providers are configured before calling integration_upsert'), routing the agent between this read tool and the sibling upsert tool. No ambiguity about when to reach for it.

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

integration_upsertA
Destructive
Inspect

Store or replace an encrypted integration secret for a provider such as Google or Apple. Use this before login-link social sign-in needs that provider's credentials. Requires a company API key (aa_...) or an MCP OAuth access token and an active plan. Returns id and prefix (first four and last four characters of the secret). The full secret is not returned. The value is encrypted at rest. A later upsert with the same provider and the same label replaces that stored secret. A different label inserts another row. Each successful call consumes integration quota, including a repeat with the same secret. A missing subscription returns an error result with status 402 (subscription_required). Exhausted quota returns status 429 (quota_exceeded). Use integration_list to see which providers are already stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional label. When omitted, the stored label is an empty string. The same provider and label replaces the existing secret. A different label stores another secret.
secretYesProvider secret to encrypt and store. Later reads return only a prefix, not this value.
providerYesIntegration provider id, such as Google or Apple. Together with label, this selects the row to insert or replace.

TDQS

A4.6/5.0
Behavior5/5

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

Despite annotations already covering safety (readOnlyHint=false, destructiveHint=true), the description adds substantial non-obvious behavior: encryption at rest, only id and prefix returned, replace-vs-insert semantics keyed on provider+label, per-call quota consumption even on repeats, and specific 402/429 error statuses. Nothing here contradicts the annotations.

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?

Sentences are short and the primary purpose, precondition, and failure modes are front-loaded. The label replace/insert rule is repeated from the schema, adding mild redundancy, but overall the text is dense and earns most of its length.

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?

With no output schema, the description carries the return-value burden and does so well (id and prefix, not the full secret). Combined with quota, error codes, and the sibling pointer, an agent has everything needed to call this mutation correctly.

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 provider, label, and secret are already fully documented in the schema, including the label replace/insert rule. The description restates the same label semantics and adds no syntax or format detail beyond the structured fields, so the baseline of 3 applies.

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 states a specific verb set (store or replace), the resource (encrypted integration secret), and the scope (per provider such as Google or Apple). This is clearly distinguishable from siblings like integration_list and create_login_link.

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 an explicit precondition ('Use this before login-link social sign-in needs that provider's credentials') and routes the agent to the sibling integration_list to discover which providers already exist. Quota and subscription error paths are also flagged, so the agent knows when the call will fail.

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

keys_createAInspect

Mint an additional company API key. The full secret is returned once (only a hash is stored) and cannot be fetched again. An active plan is not required. Requires a company API key (aa_...) or an MCP OAuth access token. Returns id, secret, and prefix. Creating a key can be rate limited. Optional name is only a label. When name is omitted, the stored label is mcp.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional label stored with the new key. When omitted, the label is mcp. The server generates the secret and returns it once.

TDQS

A4.4/5.0
Behavior5/5

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

Discloses critical behaviors beyond annotations: secret returned once only, only a hash stored, cannot be fetched again, rate limiting possible, and required auth. Annotations cover mutation/idempotency but not these operational details.

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?

Front-loaded with the core action, then details. Slightly dense but each sentence earns its place; no wasted words.

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, the description covers return values (id, secret, prefix), security constraints, auth requirements, and rate limits. Everything an agent needs to call it safely is present.

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 coverage is 100%, so parameters are already documented. The description adds meaningful context about the 'name' parameter (label only, default 'mcp'), which reinforces and slightly clarifies 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?

States a specific verb and resource ('Mint an additional company API key') that clearly distinguishes it from siblings like oauth_client_create or create_login_link. The action is unambiguous and scoped.

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?

Provides useful context (no active plan required, auth methods accepted), but does not explicitly compare against alternatives or state when-not-to-use this tool versus siblings. Usage is implied but not fully directed.

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 that uses CorroborateMe as the identity provider, with RP-initiated logout enabled. Use this for your app's own OIDC login. MCP hosts connect through protected-resource metadata and dynamic client registration, not this tool. Requires a company API key (aa_...) or an MCP OAuth access token and an active plan. Returns clientId and, for a confidential client, clientSecret once (the secret prefix is aas_, not aa_). A missing subscription fails the tool with message subscription_required. Exhausted quota fails with message quota_exceeded. Too many registrations returns an error result with code rate_limited. Set public_client for a public PKCE client. If post_logout_redirect_uris is omitted, each redirect origin's / and /login are allowlisted.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the relying-party client.
public_clientNoSet true for a public client that uses PKCE, such as a SPA. Omit or false for a confidential client, which receives clientSecret once.
redirect_urisYesRedirect URIs after sign-in. This field must be present. An empty array is stored.
post_logout_redirect_urisNoOptional allowlist of post_logout_redirect_uri values for end-session. When omitted, each redirect origin's / and /login are used.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the generic write/safety profile (readOnlyHint=false, idempotentHint=false), while the description adds real behavioral context: auth requirements, the one-time clientSecret return with its aas_ prefix, and the specific failure modes (subscription_required, quota_exceeded, rate_limited). The rate_limited disclosure also reinforces the non-idempotent annotation rather than contradicting it.

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 front-loaded with purpose and routing, then auth, then return/error behavior. Nearly every sentence carries information an agent needs; only the secret-prefix aside ('aas_, not aa_') borders on trivia, so it falls just short of maximal efficiency.

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 correctly compensates by naming the return values (clientId, clientSecret once) and the error codes an agent may encounter. Combined with the auth and default-behavior notes, an agent has everything needed to call and interpret this tool.

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 coverage is 100% so a baseline of 3 applies, but the description goes further by explaining the consequence of omitting post_logout_redirect_uris (each redirect origin's / and /login are allowlisted) and clarifying the PKCE meaning of public_client. That is genuine added meaning beyond the schema text, though it does not cover every 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 states a specific verb and resource ('Register an OIDC relying-party client that uses CorroborateMe as the identity provider') and immediately scopes it against the sibling behavior of MCP hosts using dynamic client registration. An agent can distinguish this from keys_create, integration_upsert, and the other siblings without opening a schema.

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 ('Use this for your app's own OIDC login') and when-not ('MCP hosts connect through protected-resource metadata and dynamic client registration, not this tool'), plus prerequisites (company API key aa_... or MCP OAuth access token, active plan). Nothing about routing is left to inference.

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

oauth_client_revoke
DestructiveIdempotent
Inspect

Soft-revoke an OIDC relying-party client for the authenticated company. Use this when an app should no longer authorize or refresh tokens. Sets revoked_at, disables the Better Auth oauthClient, and stamps outstanding access/refresh tokens revoked. Requires a company API key (aa_...) or an MCP OAuth access token. Returns ok true when the client was revoked. Missing or already-revoked clients return an error result with code not_found. This does not delete the row; list via REST GET /api/oidc/clients still shows revoked clients. REST equivalent: POST /api/oidc/clients/{clientId}/revoke.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idYesOIDC client_id to revoke (the public identifier returned by oauth_client_create, not the internal row id).
retry_login_webhookAInspect

Send the signed login webhook again for a session that already used the webhook method. A prior delivery failure is not required. The session must be completed or consumed. Delivery already tries up to 3 times (immediately, then after 500ms, then after 2000ms) on HTTP 408, 429, 5xx, and network errors, and it does not retry other 4xx responses. Call this for a further attempt. Requires a company API key (aa_...) or an MCP OAuth access token. Pass the sessionId from create_login_link as session_id. It POSTs the signed JSON again to the session webhook URL. The hex SHA-256 HMAC of the raw body is in X-Agent-Auth-Signature, and X-Agent-Auth-Attempt is also set. The payload type is agent_auth.login_completed and includes session_id, company_id, state, user_id, email, claims, and retry true. Returns ok, delivery, and errors, or ok false with code not_found, not_completed, no_webhook, or webhook_not_enabled. It does not mint a new login link. Redirect, post_message, and form_post do not use this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYessessionId from create_login_link whose webhook should be sent again. The session must be completed or consumed and must include a webhook URL.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (non-read-only, non-idempotent, non-destructive), and the description adds substantial behavior beyond that: the exact retry schedule, which HTTP statuses trigger retries and which do not, the auth requirement, the HMAC header and attempt header, the payload type and fields, and the failure codes. This is unusually rich disclosure for a mutation tool.

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?

Front-loaded with the operation and the key precondition, and every sentence carries operational information. It is on the long side and repeats the POST/signed-JSON idea and the error-code list slightly, but no sentence is 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?

With no output schema, the description carries the return contract itself: success shape (ok, delivery, errors) and failure codes (not_found, not_completed, no_webhook, webhook_not_enabled), plus the explicit note that it does not mint a new login link. Nothing needed to call it correctly is missing.

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 coverage is 100% for the single parameter, so the baseline is high. The description still adds value by mapping the caller-side name ('Pass the sessionId from create_login_link as session_id') and restating the completion/webhook-URL precondition that governs valid input.

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?

States a specific verb and resource ('Send the signed login webhook again') and immediately scopes it to sessions that already used the webhook method, which cleanly separates it from create_login_link and get_login_status. An agent can identify the tool's job 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 Guidelines5/5

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

Gives explicit preconditions ('session must be completed or consumed', must include a webhook URL) and explicitly rules out the 'prior delivery failure required' assumption. It also names the exclusions ('Redirect, post_message, and form_post do not use this tool') and points at create_login_link as the source of the session, so when/when-not is fully covered.

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

webhook_allowlist_add
Idempotent
Inspect

Allow a callback URL prefix for later login-link notify. Call this before create_login_link when methods include webhook, redirect, form_post or post_message. Requires a company API key (aa_...) or an MCP OAuth access token. Pass url_prefix, at least 4 characters, for example https://hooks.example.com/ or cursor://. Returns ok true. Adding the same prefix again has no further effect. A shorter prefix returns ok false with code invalid_prefix. Callbacks outside an allowlisted prefix make create_login_link return an error with code not_allowlisted, or allowlist_empty when no prefix is stored. This call does not send a webhook.

ParametersJSON Schema
NameRequiredDescriptionDefault
url_prefixYesURL prefix to allow, at least 4 characters. Use an https prefix for webhooks, redirects, and form posts, or a custom scheme such as cursor:// for deep links.

Tool Schema Changelog

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

  1. 1 tool update
    • Changedcreate_login_link1 field changed
      • changedInput schema / properties / post_message_origin / description
        Previous value: -"http(s) origin that should receive the agent_auth.login_completed postMessage. Required when post_message is enabled. It is not allowlisted. Production requires https except localhost."New value: +"http(s) origin (scheme://host[:port]) that should receive the agent_auth.login_completed postMessage. Required when post_message is enabled. Its origin must match an allowlisted prefix (the path is ignored). Production requires https except localhost."
  2. 1 tool update
    • Changedbilling_checkout1 field changed
      • addedInput schema / properties / interval
        Added value: +{
        +  "description": "month for $5.99 a month (default), year for $55 a year.",
        +  "enum": [
        +    "month",
        +    "year"
        +  ],
        +  "type": "string"
        +}
  3. 1 tool update
    • Addedoauth_client_revoke
  4. 13 tool updates
    • 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

Publisher details

Operator
CNR Consulting · Publisher source
Vendor relationship
Unknown
Trust center
Unknown
Restrictions
Paid Plans

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides OAuth-based MCP integration and client-side tooling for connecting agents to a remote service, with CLI and plugin support.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to interact with Zammad tickets, articles, search and replies under each caller's own permissions, using either a static token or SSO/OIDC per-user mode.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agent clients to safely connect to tools and execution resources through MCP with authorization, approvals, audit, chat-context isolation, SSH/Docker access, and long-running command session tracking.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.