MockPost
Captures and simulates Discord webhook messages for testing application notifications.
Simulates Facebook webhooks and OAuth flows, allowing agents to verify and trigger Facebook integrations.
Simulates GitHub webhooks and OAuth flows, enabling testing of GitHub events and authentication.
Captures outbound emails via SMTP, emulating Gmail for testing email delivery.
Provides fake Google OAuth endpoints to simulate Google login and user profile flows.
Captures and simulates Slack webhook messages for testing Slack integrations.
Simulates Stripe API calls and webhook events, delivering signed Stripe events to your app.
Captures Telegram bot API messages and simulates incoming messages from users.
Simulates Twilio SMS API for testing SMS messaging with SID-based credentials.
Simulates WhatsApp Graph API for testing message delivery and inbound messages.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MockPostget the OTP code from the latest email"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ MockPost
Your app thinks it's talking to Stripe, Telegram, Twilio and Gmailโฆ but it's MockPost.

MockPost is a local, multi-channel message emulator for end-to-end testing. Point your app's outbound credentials at MockPost and it captures every email, Telegram message, WhatsApp message, SMS, push notification, Slack/Discord webhook, Stripe event and OAuth session โ while simulating realistic inbound events back to your app. All local, all deterministic, zero real credentials.
Web panel โ a unified timeline of every message across all channels, with per-channel detail, per-app filtering and a "Copy as Markdown" button.
MCP server โ an agent (Claude Code, OpenCode, Cursor, any MCP client) inspects the timeline, reads OTP codes and fires simulated events, all in one call.
Zero config faking โ your app keeps its real SDKs and its real-looking credentials; MockPost identifies each app by those credentials, so it never knows it's being faked.
Why? Real services mean accidental sends, third-party credentials, and agents that can't inspect what your app actually sent. MockPost makes message delivery observable.
Screenshots

Related MCP server: hookray-mcp
Quick start
PyPI (once published)
pipx install mockpost # or: uv tool install mockpost
mockpost # starts the server on :8090
# MCP server, for any harness:
pipx install mockpost && mockpost-mcp # stdio MCP serverDocker (recommended)
docker run -p 8090:8090 -p 1025:1025 -v mockpost-data:/app/data ghcr.io/reiarseni/mockpost
# panel: http://localhost:8090
# SMTP: localhost:1025 (no auth)From source
git clone https://github.com/reiarseni/mockpost
cd mockpost
uv venv && uv sync
uv run mockpost60-second smoke test:
# send an email to your own machine
python -c "import smtplib; from email.mime.text import MIMEText; m=MIMEText('Your code is 123456'); m['Subject']='Verify'; m['From']='app@test.com'; m['To']='you@test.com'; smtplib.SMTP('localhost',1025).send_message(m)"Then open http://localhost:8090 โ the email is on the timeline, and get_latest_otp will find the code 123456.
What your app should point where
Channel | Point your app to | Typical env var |
Email (SMTP) |
|
|
Telegram |
|
|
|
| |
Web Push |
|
|
SMS (Twilio) |
|
|
FCM |
|
|
APNs |
|
|
Slack / Discord |
|
|
Stripe | API |
|
OAuth (Google/GitHub/Facebook/X) | authorize/token/userinfo under | OAuth URLs |
GitHub webhooks | create hook |
|
Facebook webhooks | verify |
|
X (Twitter) webhooks | register | CRC |
Google OAuth extras |
| real Google OAuth endpoints (no webhooks by design) |
FTP / FTPS / SFTP |
|
|
The /config page shows exact values plus copy-paste snippets per channel.
Inbound webhooks (back to your app): register your app's webhook in the panel (/webhooks) or via MCP register_webhook. Simulated inbound messages, status changes and signed Stripe events are POSTed to your app's URL โ and every delivery (including the app's response body, even when it was down) is recorded in the timeline.
MCP integration
MockPost exposes an MCP server over stdio. Any harness that speaks MCP gets tools to inspect the timeline, read OTPs, and fire simulated events โ so your agent can verify end-to-end behavior autonomously.
Prerequisite: the MockPost HTTP service must be running (default
http://localhost:8090). The MCP server is a client of its internal API, so every tool call needs it up.
The MCP server ships with the repo and runs with python -m mcp_server.server (requires the Python deps from requirements.txt; MOCKPOST_URL defaults to http://localhost:8090).
Claude Code
Add to your project's .mcp.json (project-scoped) or ~/.claude.json / claude_desktop_config.json (user-scoped):
{
"mcpServers": {
"mockpost": {
"command": "python",
"args": ["-m", "mcp_server.server"],
"env": { "MOCKPOST_URL": "http://localhost:8090" }
}
}
}OpenCode
OpenCode supports MCP servers through its config (opencode.json / opencode.jsonc). Add the server under the mcp section:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mockpost": {
"type": "local",
"command": ["python", "-m", "mcp_server.server"],
"environment": { "MOCKPOST_URL": "http://localhost:8090" },
"enabled": true
}
}
}Some OpenCode versions use
"type": "stdio"instead of"type": "local"โ use whichever your installed version accepts.
Any MCP harness (Cursor, Windsurf, VS Code, Continue, custom clients)
The universal contract is the same: run the server with command + args, pass env vars, done.
VS Code (GitHub Copilot / MCP):
mcp add mockpost -e "python" "-m" "mcp_server.server"or configure in.vscode/mcp.json/ user settings undermcp.servers.Cursor: Settings โ MCP โ Add server โ type
command, commandpython -m mcp_server.server.Raw JSON (any stdio MCP client):
{
"mcpServers": {
"mockpost": {
"command": "python",
"args": ["-m", "mcp_server.server"],
"env": { "MOCKPOST_URL": "http://localhost:8090" }
}
}
}On Windows, wrap the command:
"command": "cmd", "args": ["/c", "python", "-m", "mcp_server.server"].
What the agent can do
Tool | Purpose |
| Call this first. Full picture of a test run across all channels, in Markdown. |
| Inspect captured messages (full MIME/JSON payload). |
| Simulate a user messaging your app (Telegram/WhatsApp) โ delivered to your webhook. |
| Fire delivered/read/failed status changes. |
| Send a signed Stripe event ( |
| Fire signed social webhooks (X-Hub-Signature-256 / X-Twitter-Webhooks-Signature). |
| Returns the hub.* verification URL used by Meta. |
| Read OTP codes / TOTP for 2FA flows. |
| Drive fake OAuth logins and inspect the resulting session. |
| Manage and verify webhooks, including what the app returned (or that it was down). |
| Hand your app a real Web Push subscription, then kill it to test the 410 cleanup path. |
| Make an FCM or APNs token answer as uninstalled (404 / 410). |
| Scope everything to one app / one test run. |
| Clean up between runs. |
Typical agent flow:
1. set_app("my-app") # scope to your app
2. (your test runs and sends emails/messages)
3. get_timeline_markdown() # what did my app actually send?
4. get_latest_otp("user@test.com") # the login code, parsed for you
5. simulate_incoming_message("whatsapp", ...) # now test the reply path
6. get_timeline_markdown() # verify the round tripPer-app isolation (many apps testing at once)
Each app is identified by its fake credentials โ it sends no extra headers, it never knows MockPost isn't the real service. Register the app once (panel /apps or MCP register_app):
Fake credential | Channel it identifies |
Telegram bot token |
|
Twilio Account SID |
|
Stripe |
|
WhatsApp phone_id |
|
FCM project_id |
|
SMTP port ( |
|
Login username (FTP/FTPS/SFTP) |
|
Consequences:
Captured messages are tagged with their app (panel filters by app).
A webhook bound to an app only receives that app's simulated events.
Unregistered credentials fall into the global queue.
Environment variables (all optional)
Variable | Default |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| (empty โ all http(s) except metadata/link-local) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| (empty โ any credential is accepted) |
Emulated channels
Email (SMTP with AUTH, MailHog-style) ยท Telegram Bot API (13 methods, any body format) ยท WhatsApp Cloud API (any Graph version, messages + statuses) ยท Web Push (push service with real VAPID validation and payload decryption) ยท Twilio SMS (Messages.json + StatusCallback) ยท FCM ยท APNs ยท Slack ยท Discord ยท Stripe (checkout/payment_intents + signed Stripe-Signature events) ยท OTP (SMS/email/TOTP) ยท Fake OAuth2/OIDC for Google/GitHub/Facebook/X (JWT with local key) ยท Social webhooks (GitHub, Facebook, X) with per-provider signatures ยท FTP/FTPS/SFTP (per-app filesystem-backed roots, username-as-app-name login).
Protocol fidelity
The goal is that an app points its real SDK at MockPost and notices nothing: no adapters, no client changes. That means matching more than the happy path.
Transports and body formats. Telegram takes JSON, form-urlencoded, multipart or query parameters on GET and POST, like the live API; Slack and Discord also read the form-encoded
payloadfield; OAuth token requests take form or JSON.Status codes and bodies. Discord answers
204with no body unless?wait=true; APNs answers200with an empty body and the id in theapns-idheader; Slack answers the literalok.Error envelopes. Telegram
{ok, error_code, description}, Graph{error: {message, type, code, fbtrace_id}}, Google FCM{error: {code, message, status, details}}, Stripe{error: {message, type, code}}, Twilio{code, message, status}, OAuth{error, error_description}.Identifier shapes.
wamid.โฆ,SM+32 hex,cs_test_โฆ,pi_test_โฆwith itsclient_secret,projects/{id}/messages/โฆ.Failure paths worth testing. A dead Web Push subscription answers
410, an uninstalled FCM token404 UNREGISTERED, an APNs one410 Unregistered, and an oversized APNs payload413โ the signals a backend uses to prune its own tables.
Set MOCKPOST_STRICT_AUTH=1 to also enforce authentication everywhere and get
the real 401/403/535 when a client forgets its credentials.
License
MIT โ see LICENSE.
Available Tools
31 toolsclear_allA
Delete all captured messages (or only those of a test_id/app).
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| test_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Delete' indicates destructive behavior, but there is no statement about permanence, irreversibility, or side effects. The description adds little beyond the tool's purpose and does not disclose behavioral traits such as whether deletion is permanent or how multiple filters combine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler; the core action and optional scoping are front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two optional params and no output schema, the description is short but mostly adequate. It does not clarify param combination semantics or warn about irreversible bulk deletion, which are relevant for an agent invoking a destructive operation. Overall, it is minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions (0% coverage), so the description must compensate. It does map the parameters to 'of a test_id/app', which gives them some meaning as filters. However, it fails to explain how the two parameters interact (e.g., AND or OR) or that omitting both deletes everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Delete' and a clear resource 'all captured messages', with an explicit optional scope by test_id/app. This distinguishes it from siblings like clear_channel or delete_app, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you want to delete captured messages, optionally filtered by test_id or app. It does not explicitly mention alternatives, conditions, or when not to use it, leaving the agent to infer the scope from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_channelA
Delete all captured messages of a channel (cleanup between test runs). With app, only that app's messages.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| channel | Yes | ||
| test_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It clearly states the destructive action and the channel scope, and it explains that providing an app limits deletion to that app's messages. The impact of the optional test_id parameter is not disclosed, which keeps this from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences: the first gives the action and purpose, and the second clarifies app scoping. Every word earns its place, and there is no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core destructive behavior and the app scope, but it does not explain the optional test_id parameter or explicitly contrast the tool with clear_all. With no annotations and no output schea, this leaves some decision-making information missing for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add parameter meaning. It clarifies that channel is the target channel and that app acts as a filter, but it does not explain test_id at all. This is a notable gap given the schema provides no descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('Delete'), a precise resource ('all captured messages of a channel'), and an intended use case ('cleanup between test runs'). This makes it easy to distinguish from the sibling clear_all, which appears to operate at a broader scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'cleanup between test runs' gives an explicit context in which the tool should be used. It does not name alternatives or state when not to use it, but the channel-scoped cleanup purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_push_subscriptionA
Create a Web Push subscription and return it shaped exactly like the browser's PushSubscription (endpoint + keys.p256dh + keys.auth). Hand it to the app under test: MockPost keeps the private key, so when the backend sends the encrypted push with pywebpush or web-push it verifies the VAPID signature, decrypts the payload and captures the cleartext.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does well: it discloses that MockPost retains the private key, that the backend can send encrypted push via pywebpush or web-push, and that VAPID verification, decryption, and cleartext capture occur. It does not describe persistence or cleanup behavior, but for a zero-parameter mock helper this is strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and return shape, followed by the essential workflow behavior. Every clause adds value and nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations, and no output schema, the description is complete: it states exactly what is returned, how the result should be used, and what happens when the backend delivers a push. An agent has enough information to invoke it correctly and integrate it into a test flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and 100% schema coverage, so the rubric baseline is 4. The description adds no parameter-level meaning because none exists, and none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Create a Web Push subscription') and precisely defines the return shape as the browser's PushSubscription with endpoint and p256dh/auth keys. This clearly distinguishes the tool from siblings that list, expire, or simulate push-related events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Hand it to the app under test' and explains how the subscription is used when the backend sends an encrypted push. It does not explicitly enumerate when-not-to-use or name alternative tools, but the intended workflow is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_appA
Delete a registered app. Its webhooks become global.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does reveal the key non-obvious consequenceโa deleted app's webhooks become globalโwhich is exactly the kind of side effect an agent must know. It stops short of stating whether deletion is permanent/irreversible, what permissions are needed, or what a successful response looks like, so coverage is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary action and followed by the single most important side effect. Every word earns its place; there is no fluff or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the operation and its most surprising side effect, which is a reasonable baseline. The gapsโirreversibility, expected response, and the fate of other app-scoped resources (test IDs, OTP secrets, simulation configs)โmatter more precisely because there are no annotations to backstop the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for the bare app_id (title 'App Id'). It adds a real constraintโthe id must reference a registered appโand implies the app may own webhooks, but it never says how to obtain a valid id (e.g., via list_apps). For a single self-evident parameter this is adequate but thin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('a registered app'), cleanly distinguishing it from siblings like register_app, set_app, and list_apps. The second sentence adds a meaningful scope qualifier about webhook ownership, so an agent can identify this as the removal operation without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended useโremoving an appโis easily inferred from the verb, and the webhook side effect signals a consequence worth weighing before calling. However, the description never explicitly contrasts this with alternatives (e.g., 'to create an app use register_app') or states prerequisites such as needing a valid registered app_id, so routing guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expire_push_subscriptionA
Mark a Web Push subscription as gone: the next push answers 410, which is how a backend learns it must delete a dead subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| subscription_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the key side effect: subsequent pushes return 410, and it clarifies that the tool marks rather than deletes. However, it does not address reversibility, idempotency, error cases, or whether the subscription remains visible to list_push_subscriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one tight sentence that front-loads the action and consequence, with the rationale attached without redundancy. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, one-parameter mutation tool with no output schema, the description adequately covers the core purpose and observable outcome. Minor gaps remain, such as how to source subscription_id and what the direct response is, but these are not severe for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description does not explain what subscription_id refers to, where it comes from, or its expected format. It only indirectly implies that the subscription is a Web Push subscription, leaving the parameter under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'mark', with a clearly identified resource, 'a Web Push subscription', and explains the observable consequence ('the next push answers 410'). This makes it easy to distinguish from siblings like create_push_subscription, list_push_subscriptions, and simulate_push_token_unregistered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a subscription should be treated as dead so a backend can observe a 410 and clean up. It does not explicitly name alternatives or exclusions, but the context is clear enough given the sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_totp_secretB
Generate and store a TOTP secret (Google Authenticator). Returns base32 secret and otpauth:// URL.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral disclosure burden. It does disclose an important side effect ('store') and the return values, but it does not explain repeated-call behavior, whether the identifier overwrites an existing secret, or any persistence/lookup semantics. This is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that names the action, the resource, and the key outputs with no filler. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool, the description covers the main action and return values, especially since there is no output schema. However, it is missing the semantics of 'identifier' and the behavior around storage/overwrite. The absence of annotations makes this gap more significant than it would otherwise be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 'identifier' parameter at all. The name is somewhat self-explanatory, but the agent is left to guess whether identifier is a label, a lookup key, a username, or something else. The description should have clarified this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate and store') with a specific resource ('TOTP secret') and tells the agent exactly what is returned (base32 secret and otpauth:// URL). This clearly distinguishes it from the sibling get_totp_code, which likely retrieves the current code rather than creating a secret.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like get_totp_code. It does not state that this is for initial enrollment/setup, nor does it exclude scenarios such as retrieving an existing code. Usage is only weakly implied by the action word 'Generate'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_configB
Return host/port/base URL/fake tokens the app must use for that channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the return payload and notes that tokens are fake, which is useful, and 'Return' implies read-only behavior. However, it does not address error behavior for unknown channels, whether config is scoped to the current app, or the response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words, and the core payload (host/port/base URL/tokens) is front-loaded. This is appropriately sized for a one-parameter read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists the return values, which partially compensates for the absent output schema. But it leaves the channel parameter format, error semantics, and app scoping unspecified, and with 30 siblings there is no routing aid. Adequate for simple use, yet with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for the channel parameter. It only loosely ties channel to the output ('for that channel') without defining whether channel is a name, ID, or slug, or where valid values come from. The agent is left guessing the parameter's domain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Return') with a specific resource: host/port/base URL/fake tokens for a channel. This is specific enough for an agent to distinguish it from siblings like get_latest_otp, get_message_detail, and get_oauth_session, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to call this tool versus alternatives. The phrase 'the app must use' implies it is the config source of truth, but there are no prerequisites, exclusions, or hints about which sibling covers other cases. An agent must infer usage entirely from the tool name and the short description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_otpC
Return the latest OTP code (SMS or email) sent to an identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | any | |
| test_id | No | ||
| identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior itself. It states only that the latest OTP is returned; it does not mention whether retrieval is destructive, whether the code is marked as consumed, what happens if no OTP exists, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is concise, though it achieves conciseness by omitting useful behavioral and parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, no annotations, and 0% schema coverage, the description is too thin to support correct invocation. An agent cannot tell what identifier format is expected, what channel accepts, what test_id does, or what the return payload looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the parameters. It indirectly explains identifier ('sent to an identifier') but says nothing about channel values or test_id, leaving two of three parameters effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and identifies the resource as the latest OTP code sent to an identifier, adding 'SMS or email' to clarify the code type. It does not explicitly distinguish itself from the sibling get_totp_code, so it loses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies retrieving the most recent SMS/email OTP for an identifier but gives no guidance on when to prefer this over get_totp_code or other OTP-related siblings, nor any exclusions. There is no explicit when-to-use or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_detailA
Return a message's full payload, including raw_payload (MIME/JSON).
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the return behavior by mentioning the full payload and raw_payload format. However, it does not mention error behavior, authentication requirements, or whether any side effects occur, though the verb 'Return' implies a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that is front-loaded with the action and resource. It contains no filler and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter getter, the description provides the core semantics and expected payload. However, because there is no output schema and no annotation coverage, the absence of details about returned structure, error cases, or message_id provenance leaves some gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain message_id beyond the implicit 'a message's' connection. It does not specify the ID format, where to obtain the ID, or how it relates to sibling tools like list_sent_messages, leaving the single required parameter under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a clear resource ('a message's full payload'), and names a distinctive detail ('raw_payload (MIME/JSON)'). This distinguishes it from sibling tools like list_sent_messages, which would list messages rather than return full details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used when a full message payload is needed, but it does not explicitly state when to prefer it over alternatives, nor does it mention any exclusions. There is no explicit routing guidance such as 'use list_sent_messages for summaries.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oauth_sessionA
Inspect a simulated OAuth session: code, tokens, returned profile and expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It clarifies that the session is simulated and lists the returned artifacts, which is useful. But it does not disclose what happens for an unknown or expired session_id, whether any state is modified, or whether a prior setup step is required. 'Inspect' implies read-only, but details are thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. The verb comes first, followed by the object and the key contents, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 does a good job of indicating what the return will contain (code, tokens, profile, expiry). It does not explain error behavior for missing sessions, but that is a minor gap given how low-complexity this tool is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never explains session_id. Although the parameter name and title are somewhat self-evident, the description fails to add format, example, or context for the session identifier. With low coverage, the description needed to compensate but did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Inspect') and resource ('simulated OAuth session'), and it enumerates what the session contains: code, tokens, returned profile, and expiry. This naturally distinguishes it from sibling simulation/setup tools like set_oauth_fake_profile or list_apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Inspect' implies the tool should be used when an agent wants to examine a simulated OAuth session, and there is no obvious alternative getter among the siblings. However, the description does not explicitly state preconditions, such as needing to set an OAuth fake profile first, nor does it call out alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timeline_markdownA
FULL TIMELINE as Markdown: messages + webhook_events + stripe_events in chronological order. Call this first when verifying a test result; use get_message_detail only for a single event's detail. With app, only that app's events.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| limit | No | ||
| since | No | ||
| test_id | No | ||
| channels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It discloses non-obvious behavior: the output is a combined Markdown timeline across three event types, ordered chronologically, and limited to one app's events when app is provided. It does not spell out all optional-filter effects, but the read-oriented content and 'get' verb make the read-only nature reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three crisp sentences with purpose front-loaded, usage guidance second, and app scoping last. Every sentence earns its place, and there is no filler, repeated schema information, or boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape doesn't need to be in the description. However, all 5 parameters are optional with no schema descriptions and no annotations, and the description leaves limit, since, and channels ambiguous. It is excellent for purpose and routing but not complete enough for fully informed invocation across all parameter combinations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for all 5 parameters. It clarifies the app parameter ('With app, only that app's events') and hints at test context, but limit, since, and channels receive no explanation. An agent would have to rely on parameter names and defaults to infer their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it retrieves the full timeline as Markdown, listing messages, webhook_events, and stripe_events in chronological order. It also differentiates from get_message_detail by noting that the sibling covers only a single event's detail. An agent can confidently identify what this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call this tool first when verifying a test result and names the alternative tool with the condition for using it: get_message_detail only for a single event's detail. The app-filter sentence adds clear guidance on when the tool is scoped. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_totp_codeA
Compute the current TOTP code (6 digits) for a previously generated secret. Window ยฑ1.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the output length (6 digits), the time-window behavior (ยฑ1), and the dependency on a previously generated secret. It does not mention error behavior for unknown identifiers or time-sync sensitivity, but it provides meaningful behavioral detail beyond a bare one-liner.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that leads with the action and key result, then adds the two most important qualifiers (6 digits, window ยฑ1). There is zero redundancy and every word carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool this is nearly adequate, but it leaves important gaps: what the identifier refers to, what the return value looks like (raw digits vs JSON), and how it relates to sibling get_latest_otp. No output schema exists, so the description should have covered more of these.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for the bare 'identifier' parameter. It says the secret must be previously generated, but does not explain that the identifier is the one returned by generate_totp_secret, nor its format or provenance. This leaves an agent guessing what value to actually pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Compute') with a clear resource ('current TOTP code') and adds the format (6 digits) and a prerequisite (previously generated secret). It is distinct enough from generate_totp_secret, but it does not explicitly differentiate from get_latest_otp, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a previously generated secret' implies the tool should be used after generate_totp_secret, but it does not explicitly say when to use this tool versus alternatives like get_latest_otp. There is clear context but no exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsA
List registered apps with their fake credentials (MockPost identity).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly frames this as a read-only enumeration and discloses that results contain fake credentials under the MockPost identity, which is useful because no annotations are present. It does not mention pagination or ordering, but the output schema covers the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with a front-loaded verb and object, plus one valuable parenthetical clarifying the identity context. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema, the description is largely complete and tells the agent exactly what it will fetch. It could add one sentence about when listing apps is useful relative to the register/set/delete siblings, but that gap is already captured in the usage_guidelines dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description has no need to define parameter semantics. The 100% schema coverage and empty properties confirm no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete operationโlisting registered appsโand clarifies the data returned (fake credentials in MockPost identity). This differentiates it from registration/deletion/set siblings and from a generic app-listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, and no alternative sibling tools are mentioned. The agent must infer from the verb 'List' and sibling names that this is for enumeration rather than registration, modification, or deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_push_subscriptionsA
List Web Push subscriptions with their endpoint and status (active|gone).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'List' implies a read-only operation and the stated endpoint/status fields add useful detail, but it does not mention pagination, ordering, whether all subscriptions are returned, or any access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The core operation and key result fields are front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema available, this description is mostly sufficient. It would be slightly stronger if it explicitly said 'all' subscriptions or noted any pagination behavior, but the simplicity of the tool keeps the gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to add parameter-level detail; it still provides relevant context about what the result contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List Web Push subscriptions'. It also names the key output fields (endpoint and status), which clearly differentiates it from sibling tools like create_push_subscription and expire_push_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this when you need to view web push subscriptions. It does not explicitly exclude alternatives, but the 'List' verb and the existence of mutation siblings make the intended use obvious enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sent_messagesA
List captured messages for a channel (or all), newest first. channel: mail|telegram|whatsapp|webpush|sms|fcm|apns|slack|discord|stripe app: registered app name to filter only its messages.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| limit | No | ||
| status | No | ||
| channel | No | ||
| test_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It explicitly indicates this is a read-only list operation, states that messages are 'captured' (not actively sent), and documents both the scope ('channel or all') and the ordering ('newest first'). This goes beyond a bare verb and gives useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: two short lines that state the action, scope, ordering, and the two most important filters. Every sentence contributes information without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no annotations, the description is reasonably complete for the core listing use but omits semantics for status/test_id/limit and does not mention alternative tools. The output schema covers return values, so the main remaining gap is optional parameter guidance and sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value for two parameters: it lists the allowed channel values and defines 'app' as a registered app name filter. However, with 0% schema description coverage, it leaves limit, status, and test_id entirely unexplained, relying on their self-explanatory titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List captured messages') and a clear resource scope ('for a channel (or all)'), with an explicit ordering guarantee ('newest first'). It also distinguishes itself from sibling tools like get_message_detail by focusing on the list behavior rather than a single message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool: listing captured messages, optionally filtered by channel or app. It does not explicitly mention alternatives or exclusions, but the phrasing makes the intended use straightforward compared to the other listing and simulation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhook_deliveriesA
Webhook delivery history: what each app returned (code + body), even if it was down (response_code 0). Filterable by channel and app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| limit | No | ||
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully reveals an important edge case: deliveries to down apps are included with response_code 0. It also tells the agent what kind of data to expect (code + body). It does not mention ordering or pagination, but the output schema covers return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the core purpose, then adds the key edge case and filter capability. Every clause earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple historical listing tool with three optional parameters and an output schema, the description is largely sufficient. It identifies the resource, the returned content, a notable edge case, and the available filters. It could be slightly more explicit about the limit parameter, but the schema supplies the default and type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It explains that channel and app are filters, which adds meaning to those two parameters. The third parameter, limit, is not described, though its name, type, and default in the schema make its purpose reasonably inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('webhook delivery history') and specifies exactly what it contains: the code and body returned by each app, including failures with response_code 0. This clearly distinguishes it from sibling tools like list_webhooks, which would list registered webhooks rather than delivery outcomes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need a history of what apps returned for webhook deliveries, and optionally filtered by channel and app. It does not explicitly name alternatives or exclusions, but the purpose is unambiguous enough for selection among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksA
List registered webhooks, optionally filtered by channel and app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. 'List' implies a read-only operation, which is reasonably transparent for a simple listing tool. However, it does not disclose any pagination, ordering, rate-limit, or authentication behavior beyond what the output schema may imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that communicates the core action, resource, and filtering capability with no filler. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing operation with no required parameters and an output schema provided, the description is nearly complete. It covers what the tool does and the available filters. It lacks only minor contextual details like pagination or exact filter matching behavior, but those are not critical for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It explicitly indicates that 'channel' and 'app' are optional filters, which adds meaning beyond the raw schema by defining their role as filters rather than required inputs. It doesn't specify value formats, but the parameter names are self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('registered webhooks') and indicates optional filters. It distinguishes itself from sibling tools by resource: list_webhook_deliveries is about deliveries, while register_webhook/trigger_webhook are about creating and triggering webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it lists webhooks with optional channel/app filters, but it provides no explicit guidance on when to choose this tool over alternatives, no exclusions, and no mention of prerequisites. Sibling tools like list_webhook_deliveries could be confused with this one without additional context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_appA
Register or update an app: bind its FAKE credentials (Telegram bot token, Twilio SID, Stripe sk_test_, WhatsApp phone_id, FCM project_id) to a name. The app talks to MockPost using those credentials as if it were the real service; MockPost identifies it by them. Use the same name to update creds.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| creds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and handles it well: it reveals that creds are fake, that MockPost treats them as real-service creds, and that identity is derived from them. This gives the agent a genuine mental model of registration and idempotent update semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: action plus credential types, MockPost identity behavior, and the update rule. The credential list is front-loaded and the update guidance is a natural final sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and no annotations, the description is largely complete: it defines what to pass, how identity works, and how to update. Minor gaps are lack of explicit mention of the optional creds/default and any return or error behavior, but these do not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 0%, so the description must supply parameter meaning. It explains 'name' as the binding key and lists representative values for 'creds' (bot token, Twilio SID, Stripe sk_test_, etc.). It doesn't spell out that creds is optional or defaults to null, but the parameter role is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with 'Register or update an app', a specific verb and ressource, and immediately explains the binding of FAKE credentials to a name. It lists concrete creds types (Telegram, Twilio, Stripe, WhatsApp, FCM) which distinguishes it from vaguer sibling tools. 'Use the same name to update creds' clarifies the dual create/update nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this tool is used when you need to bind fake service creds to a name, and explicitly tells callers to reuse the same name to update existing creds. It does not name alternative tools such as set_app or delete_app, but the intended usage is clear enough without needing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_webhookB
Register an app webhook (Telegram setWebhook, WhatsApp, Stripe...). If you pass an app (registered name), the webhook only receives events from that app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| token | No | ||
| config | No | ||
| channel | Yes | ||
| target_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add one meaningful behavior: 'If you pass an app (registered name), the webhook only receives events from that app.' However, it doesn't disclose side effects such as replacing an existing webhook, authentication requirements, or what the response contains, so transparency is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both useful: the first states the operation and channel scope, and the second adds the app-filtering condition. There is no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a setup/registration tool with five parameters, no annotations, no output schema, and many related siblings, the description is too thin. Missing pieces include channel/target_url validation expectations, token/config meaning, return values, and which sibling to prefer for verification/list/trigger tasks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for the 5 parameters. It explains the effect of 'app' and implies target_url from 'webhook' and channel from the examples, but token and config are entirely unexplained. This is insufficient compensation for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence uses a clear verb and resource: 'Register an app webhook', with channel examples (Telegram setWebhook, WhatsApp, Stripe). This clearly states the operation and object. It doesn't explicitly distinguish itself from webhook-related siblings like list_webhooks or verify_facebook_webhook, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no direct guidance on when to call this tool instead of alternatives such as trigger_webhook, list_webhooks, or verify_facebook_webhook. The only conditional is about passing an app, which is parameter behavior rather than tool-selection guidance. Usage is therefore only implied by the verb 'Register'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_appA
Set the active app (a name registered in MockPost): incoming event simulations and queries are filtered/delivered only to that app. Pass null/None for no app. Register apps with register_app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden. It discloses the key side effect (filtering/delivery restricted to the active app), explains null/None as 'no app', and mentions the registration prerequisite. Persistence details and output are not discussed, but they are minor for a state-setting tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: action and effect, null-clearing behavior, and registration pointer. The most important information 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter state setter, this is complete: it defines the parameter contract, explains the effect, tells how to clear the state, and routes the agent to the relevant sibling tool. The presence of an output schema covers return-value expectations, so no additional return information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema alone says only 'app: string | null'. The description adds the essential semantics: the string must be a name registered in MockPost, null/None clears the active app, and register_app is the way to create such names. This fully compensates for the 0% schema description coverage on the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Set'), the exact resource ('the active app'), and the behavioral consequence (incoming simulations and queries are filtered/delivered only to that app). It also refers to register_app, making its role distinct from the registration sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly conveys when to use the tool: to scope event simulations and queries to a specific registered app. It explicitly points to register_app for registering apps. It does not exhaustively enumerate all when-not-to-use cases across siblings, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_oauth_fake_profileB
Set the profile the fake OAuth provider (google|github|facebook|x) returns on the next login.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | ||
| provider | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does disclose a useful scoping detail: the profile is returned on the next login, suggesting a one-time or targeted effect. However, it does not mention whether the setting persists, whether existing sessions are affected, or what side effects or output to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the action, names the resource, lists the valid provider options, and specifies the timingโall in one compact clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a simple setter with two parameters in a test context, but it assumes the agent understands the fake OAuth testing workflow. It omits return-value behavior, prerequisites such as registering an app or enabling fake OAuth, and whether the profile applies only once or repeatedly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It partially does by naming valid provider values (google|github|facebook|x) and clarifying that 'profile' is the object returned by the fake provider. The inner shape of profile is left unspecified, though the schema's additionalProperties:true suggests arbitrary content is allowed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it 'Set[s] the profile' that a fake OAuth provider returns, and it enumerates the supported providers inline (google|github|facebook|x). It clearly identifies this as an OAuth test helper, though it does not explicitly contrast it with sibling simulation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like get_oauth_session or the simulate_* tools. The only contextual hint is 'on the next login,' which implies timing but does not state prerequisites, recommended call order, or situations where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_test_idA
Set the active test_id: all subsequent calls are filtered/persisted with it. Pass null/None to go back to the global queue.
| Name | Required | Description | Default |
|---|---|---|---|
| test_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden; it reveals that setting is stateful, that values persist across subsequent calls, and that null clears the state. This is substantial behavioral disclosure for a setter, though it omits any mention of return behavior (covered by output schema) or session scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the core action and effect come first, and the reset alternative is front-loaded in the second sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter state setter with an output schema, the description fully covers the state change and reset path. The only slight ambiguity is which sibling tools are subject to the filter and what exactly the 'global queue' means, but the core contract is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema is just string|null with no property description, and the description adds the key meaning that null/None resets to the global queue. However, it gives no guidance on what values the test_id string should take or where to obtain it, so with 0% schema coverage the compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set the active test_id' with an immediate consequence. It clearly names the stateful effect, but doesn't explicitly contrast with sibling set_app or explain how selecting a test differs from selecting an app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context: subsequent calls are scoped to the active test_id, and passing null/None is the explicit reset path. It does not list alternative tools or non-use conditions, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_delivery_webhookA
Fire a delivery status webhook (delivered|read|failed) back to the app. Uses POST /whatsapp/simulate/status.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does clearly indicate a network POST operation and the allowed status payloads. However, it does not disclose side effects, prerequisites (e.g., app or webhook configuration), or whether this is a non-production simulation, leaving some 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and endpoint are front-loaded, and the status values are packed efficiently into the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and minimal parameter metadata, the description covers the main call mechanics but omits response/return behavior, prerequisites such as app selection or webhook registration, and how to obtain message_id. It is adequate for simple use but not fully complete for an agent unfamiliar with the environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions or enums, so the description must compensate. It adds meaningful semantics for the status parameter by listing allowed values, and message_id is reasonably inferable as the target message. However, no format or provenance for message_id is given, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fire'), a concrete resource ('delivery status webhook'), and the exact statuses it supports ('delivered|read|failed'). The endpoint makes it clear this is a WhatsApp simulation, distinguishing it from siblings like simulate_incoming_message and the other simulate_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by describing the action and endpoint, but it does not explicitly say when to pick this tool over trigger_webhook or simulate_incoming_message, nor does it mention exclusions or prerequisites. Usage context is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_facebook_eventB
Fire a Facebook Graph API webhook event signed with X-Hub-Signature-256 to the app's registered Facebook webhook. app: registered app name to target; overrides set_app for this call.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| payload | No | ||
| event_type | No | page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully reveals that the event is signed with X-Hub-Signature-256 and that 'app' overrides set_app for this call. However, it does not disclose expected outcomes, side effects, response behavior, or validation behavior for payload/event_type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the primary purpose, and the second adds essential parameter context. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has no annotations, no output schema, and zero schema description coverage, so the description must be more complete. It covers the core action but omits meaning for payload and event_type, any usage guidance, and any indication of expected results or errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for all three parameters. It only explains 'app' (target and override behavior). The 'payload' and 'event_type' parameters remain undefined in both the schema and the description, leaving important semantics missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Fire a Facebook Graph API webhook event'), the target ('the app's registered Facebook webhook'), and a key technical detail (signed with X-Hub-Signature-256). This differentiates it from sibling tools like simulate_stripe_event or trigger_webhook by naming the Facebook-specific context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. It implies use for Facebook webhook simulation and mentions the target app, but provides no exclusions, prerequisites, or comparisons with sibling simulation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_github_eventA
Fire a GitHub webhook event (push, issues, pull_request) signed with X-Hub-Signature-256 to the app's registered GitHub webhook. app: registered app name to target; overrides set_app for this call.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| payload | No | ||
| event_type | No | push |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses meaningful behavior: the event is signed with X-Hub-Signature-256, and the 'app' parameter overrides set_app for this call. However, it does not explain side effects (e.g., whether a delivery record is created), what happens if no app is set, or whether a registered webhook is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no wasted words. The first sentence states the core action and target, and the second clarifies a critical parameter override behavior. Information is front-loaded and directly useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional parameters and no output schema or annotations, the description is partially sufficient but leaves gaps: full event type enumeration, payload semantics, behavior when app is not provided, and expected return/result. It provides enough to attempt a call but not enough to anticipate all outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It explains the 'app' parameter and lists example event types, but the 'payload' parameter receives no explanation. The event_type values are only partially enumerated ('push, issues, pull_request'), leaving ambiguity about the full allowed set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fire a GitHub webhook event'), the specific event types supported ('push, issues, pull_request'), and the target resource ('the app's registered GitHub webhook'). This distinguishes it from sibling simulation tools like simulate_stripe_event or simulate_facebook_event by explicitly naming GitHub.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case through the GitHub-specific wording, but it does not explicitly state when to choose this tool over alternatives like trigger_webhook or simulate_delivery_webhook. It gives no exclusions or direct routing guidance, so usage context must be inferred from the tool name and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_incoming_messageB
Simulate an external user sending an inbound message to the app. channel: telegram (via /telegram/client/sendMessage) or whatsapp. app: registered app name to target; overrides set_app for this call.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| text | Yes | ||
| extra | No | ||
| sender | Yes | ||
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It reveals the underlying telegram endpoint and the app override behavior, but does not disclose side effects, whether an actual external send/event is triggered, auth/permission needs, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines, front-loaded purpose, and zero waste; channel and app clarifications are formatted as compact parameter notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5- parameter tool with no annotations and no output schema, three of five parameters are uncleared and there is no return or side-effect information. It is not complete enough for an agent to invoke correctly with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It explains channel and app, but the required sender and text fields, along with extra, receive no semantic explanation beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: simulate an external user sending an inbound message to the app. It also specifies concrete channels (telegram via an endpoint, and whatsapp), making it immediately distinct from sibling simulation and webhook tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives contextual details about channel choices and app targeting, including that app overrides set_app for this call, but never states when to prefer this tool over siblings or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_push_token_unregisteredA
Make a native push token look uninstalled: FCM answers 404 UNREGISTERED and APNs answers 410 Unregistered on the next send. channel: fcm | apns
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ||
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and it does reveal the key behavior: the affected token is made to look uninstalled and the next send returns provider-specific errors. It could add detail about persistence or reversibility, but the core side effect is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with no filler. The behavioral effect is front-loaded, and the channel hint is compact and immediately useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter simulation tool, the description gives the essential context: what will happen and which channels are supported. No output schema exists, but the lack of return-value documentation is not a significant gap for a fire-and-forget simulator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains channel values (fcm | apns) and identifies token as a native push token, but it does not explain where the token comes from, its expected format, or how the channel interacts with the token.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific action: make a native push token look uninstalled, and it specifies the observable effect (FCM 404 UNREGISTERED, APNs 410 Unregistered). This distinguishes it from related sibling tools like expire_push_subscription or create_push_subscription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: simulate an uninstalled push token to test the next send's failure behavior. However, the description does not explicitly say when to use this over alternatives, nor does it mention any exclusions or prerequites like needing an existing push subscription.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_stripe_eventA
Build and send a simulated Stripe event, signed (Stripe-Signature), to the registered webhook. app: registered app name to target; overrides set_app for this call.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| overrides | No | ||
| event_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral burden. It discloses the key side effect: building and sending the event to a webhook, and adds important detail that the event is signed with Stripe-Signature. It also clarifies that app overrides set_app for this call only, giving useful scoping behavior beyond the raw schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. The main action and signing behavior are front-loaded, and the app parameter note is direct and relevant. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description leaves significant gaps: it does not explain what event_type values look like or are accepted, what overrides can contain, what the resulting behavior/return value is, or what happens if no app or registered webhook exists. Given no output schema and no annotations, more context is needed for an agent to invoke this tool with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It explains only the app parameter and its override behavior. The required event_type is not described, and overrides is an unconstrained object with no explanation of its purpose or allowed keys. This is insufficient for an agent to reliably construct a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Build and send') and resource: a simulated Stripe event, signed with Stripe-Signature, sent to a registered webhook. This clearly differentiates it from sibling simulation tools like simulate_github_event or simulate_facebook_event by naming Stripe and the webhook target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: simulate a Stripe webhook event to test the registered webhook. The app override is explained. However, there is no explicit guidance about when to prefer this tool over sibling simulators, nor any stated prerequisites such as needing a webhook registered first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_x_eventB
Fire an X (Twitter) Account Activity webhook event signed with X-Twitter-Webhooks-Signature to the app's registered X webhook. payload is a list of event objects, as the real API delivers. app: registered app name to target; overrides set_app for this call.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| payload | No | ||
| event_type | No | tweet_create_events |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does add useful context: the event is signed with X-Twitter-Webhooks-Signature, targets the registered X webhook, and app overrides set_app for this call. However, it does not disclose side effects, whether a registered webhook is required, or what happens if no app is specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action. Each sentence adds distinct information: the first describes the action and signature, the second clarifies payload and app behavior. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 0% schema coverage, the description is incomplete. It fails to explain the event_type parameter, any prerequisites like webhook registration, expected return/response behavior, or side effects. An agent would lack enough context to confidently invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It meaningfully explains payload ('a list of event objects, as the real API delivers') and app ('registered app name to target; overrides set_app for this call'). However, event_type is not mentioned at all, leaving one parameter unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (fire), the resource (X/Twitter Account Activity webhook), and the signature mechanism, making the tool's purpose specific. However, it does not explicitly differentiate itself from sibling simulation tools like simulate_delivery_webhook or trigger_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the many sibling simulation tools, nor does it state any prerequisites or exclusions. It only describes what the tool does, not the conditions under which an agent should select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_webhookA
Fire a test event to a registered webhook and return the app's response.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | No | ||
| event_type | No | test | |
| webhook_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full safety burden. It discloses that the tool fires an event and returns the app's response, but says nothing about whether this makes an external network call, possible side effects on webhook state, or failure behavior when webhook_id is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 14-word sentence front-loads the verb and covers action, resource, and return value. Every element earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, no annotations, and no output schema, this minimal description covers the core action but leaves gaps in sibling differentiation, side-effect disclosure, and valid event_type/payload expectations. The moderate complexity and crowded sibling context merit more guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema property descriptions are entirely absent (0% coverage), but the description offers only the phrase 'test event,' which mildly echoes the event_type default of 'test.' The meanings of webhook_id and payload are left entirely to their self-explanatory names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('fire'), a resource ('test event to a registered webhook'), and the return value. The qualifiers 'test' and 'registered' help distinguish it from simulation siblings like simulate_delivery_webhook and registration tools like register_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a testing context but never states when to prefer trigger_webhook over the many simulate_* siblings or when not to use it. No exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_facebook_webhookA
Verify a Facebook webhook subscription (hub.mode/hub.verify_token/ hub.challenge) as Meta does on registration. Returns the challenge URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool verifies a subscription and returns the challenge URL, which is useful, but it does not mention potential side effects, authentication requirements, or any HTTP/network behavior. The core action is clear, yet the behavioral profile is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses convey the purpose, the protocol context, and the return value without wasted words. The key operational information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is sufficiently complete. It explains what the tool does, when it is used (registration), and what it returns, so an agent can select and invoke it correctly without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and the empty schema already covers the parameter surface completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verify'), names the exact resource ('Facebook webhook subscription'), and mentions the handshake fields (hub.mode/hub.verify_token/hub.challenge) plus the return value. This clearly distinguishes it from sibling registration and simulation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'as Meta does on registration' gives clear usage context: this is the verification step in the Facebook webhook registration flow. It does not explicitly list alternatives or exclusions, but the context is strong enough for an agent to infer when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have a distinct resource+action purpose, so an agent can usually select the right one. A few pairs overlap or look similarโlist_webhooks vs list_webhook_deliveries, list_sent_messages vs get_timeline_markdown, and clear_channel vs clear_allโbut the descriptions clarify the boundaries.
All tool names use snake_case with a verb-first pattern such as list_, get_, set_, register_, simulate_, and clear_. Minor multiword names like simulate_push_token_unregistered remain readable and do not break the overall convention.
31 tools is above the 25-tool threshold where the surface starts to feel heavy. The broad multi-channel domain justifies some size, but many simulate_* and channel-specific tools could be grouped or split into focused sub-servers to reduce cognitive load.
The tool set covers the core lifecycle well: app registration, webhooks, captured messages, OTP/TOTP, push subscriptions, OAuth sessions, simulation, and cleanup. Notable gaps exist, such as no delete/unregister webhook and limited inbound simulation channels beyond Telegram/WhatsApp, but typical verification workflows are still supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Test-inbox API for email and SMS: create inboxes, long-poll messages, extract OTPs and links.
A webhook inbox for agents: one call returns a live URL. Mock, verify, inspect and replay.
Receive, inspect, replay and deliver webhooks โ with signature verification and agent triggers.
Real email inboxes for AI agents: create inboxes, catch verification codes, extract OTPs, reply.
Related MCP Servers
- AlicenseAqualityDmaintenanceProgrammatic email deliverability testing for AI agents. Create inbox placement tests across Gmail, Outlook, Yahoo, Mail.ru, Yandex โ get per-provider placement (Inbox/Spam/Promotions), SPF/DKIM/DMARC auth, Rspamd & SpamAssassin verdicts, DNS health (MX, PTR, DNSBL), and live SSE results.5571MIT
- AlicenseAqualityDmaintenanceEnables AI agents to create disposable webhook URLs, capture incoming HTTP requests, inspect headers and bodies, and replay them against local or remote endpoints, streamlining the webhook handler development loop.515MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create disposable email inboxes and automatically extract OTPs, magic links, and verification codes from incoming emails.24MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to generate temporary email addresses, receive emails, and automatically extract OTP codes and links from incoming messages for automation and testing workflows.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/reiarseni/mockpost'
If you have feedback or need assistance with the MCP directory API, please join our Discord server