mcp-saas-toolkit
Manage repositories, issues, pull requests, and fetch repository statistics.
Send structured emails, check delivery status, and batch send up to 100 emails.
Send messages with thread support, list channels, set topics, and add emoji reactions.
Manage customers, create invoices, payment links, refunds, check subscriptions, and list products.
Send SMS, check message delivery, list message history, and initiate voice calls.
Click on "Deploy 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., "@mcp-saas-toolkitOnboard customer Alice from acme.com and notify Slack"
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.
What is this?
mcp-saas-toolkit is a Model Context Protocol (MCP) server that equips Claude with tools to call popular SaaS APIs on your behalf. Instead of copy-pasting API keys into chat, you configure the server once and then ask Claude things like:
"Onboard a new customer named Alice with email alice@example.com (customer, email, slack announcement)." "Create a payment link for price_1ABC, email it to them, and let me know on Slack when sent." "Open a GitHub issue for the memory leak and assign it to John."
Claude uses the right tools, calls the right APIs, handles failures via built-in retry backoffs, and gives you the result — all within the conversation.
Related MCP server: devflow-mcp
✨ Supported Integrations & Features
24 Tools across 5 Services:
Stripe (8): List/create customers, create invoices/payment links, check subscriptions, issue refunds, get balance, list products.
Twilio (4): Send SMS, check message delivery, list message history, initiate voice calls (TTS/TwiML).
Resend (3): Send structured emails, fetch delivery status, batch send up to 100 emails.
GitHub (5): List repos, get rich repo stats, list issues, create issues, open pull requests.
Slack (4): Send messages (with thread support), list channels, set topics, add emoji reactions.
🔋 MCP Prompts (Workflow Templates):
onboard_customer: Create Stripe customer → Send welcome email → Notify Slackinvoice_reminder: Check Stripe subscription → Create invoice → Email/SMS customerincident_report: Create GitHub issue → Alert Slack → Email stakeholdersnew_release: Fetch recent commits → Create GitHub issue → Announce on Slack
📊 MCP Resources (Live Feeds):
saas://stripe/balance: Read current Stripe account balancesaas://stripe/recent-charges: Fetch recent charges instantlysaas://github/{owner}/{repo}/overview: Dynamic rich repository telemetry
🚀 Quick Start
1. Install & Configure
npm install -g mcp-saas-toolkit
# Or use directly via npx mcp-saas-toolkitCopy the example .env file and fill in your keys:
# Logging level (debug, info, warn, error)
LOG_LEVEL=info
# Services (Only set keys for the ones you want to use)
GITHUB_TOKEN=ghp_...
SLACK_BOT_TOKEN=xoxb-...
STRIPE_SECRET_KEY=sk_test_...
TWILIO_ACCOUNT_SID=AC...
TWILIO_AUTH_TOKEN=...
TWILIO_PHONE_NUMBER=+1234567890
RESEND_API_KEY=re_...2. Add to Claude Desktop
Open your config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"saas-toolkit": {
"command": "npx",
"args": ["-y", "mcp-saas-toolkit"],
"env": {
"GITHUB_TOKEN": "ghp_...",
"STRIPE_SECRET_KEY": "sk_test_...",
"SLACK_BOT_TOKEN": "xoxb-..."
}
}
}
}Restart Claude Desktop. You should see all tools, resources, and templates appear!
💬 Example Prompts
Once the server is connected, try these multi-tool workflows:
"Look up the Stripe customer with email john@acme.com, check their subscription, and if it's past due, send them an SMS reminder at +15551234567."
"We have a prod incident. Open a bug report on the frontend repo, email the on-call at ops@co.com, and drop a red alert in the Slack #engineering channel."
"Read my Stripe balance resource, and summarize how we did this week to the #general channel."
🏗️ Architecture & Development
Built with robustness in mind:
Resiliency: All external API interactions are wrapped in an exponential backoff retry handler to safely absorb rate limits and 5xx errors.
Lazy Initialization: SDK clients are booted only when first invoked. Missing API keys will not crash the server but will cleanly surface actionably errors.
Strict Formatting: Input schemas strictly define all expectations. Output always maps to an
{ success: true, data }envelope.
Local verification
npm install
npm run build
npx @modelcontextprotocol/inspector node dist/index.jsAvailable Tools
24 toolsgithub_create_issueB
Create a new issue in a GitHub repository. Supports labels, assignees, and milestone.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Issue body (supports Markdown) | |
| repo | Yes | Repository name | |
| owner | Yes | Repository owner | |
| title | Yes | Issue title | |
| labels | No | Labels to apply (must already exist in the repo) | |
| assignees | No | GitHub usernames to assign | |
| milestone | No | Milestone number to associate with |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It states 'Create' implying mutation but does not disclose required permissions, idempotency, or side effects. Limited insight into behavior beyond creation.
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?
Single concise sentence front-loading purpose. No wasted words, but could be more structured with usage 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?
Adequate for a creation tool with well-described parameters, but lacks information on return values (e.g., created issue object) and error conditions. No output schema to compensate.
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 100% with descriptions for all 7 parameters. Description adds minimal value by naming supports for labels, assignees, and milestone, but does not enhance understanding beyond schema.
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?
Description uses specific verb 'Create' and resource 'new issue in a GitHub repository'. It clearly distinguishes from sibling tools like github_create_pull_request (creates PRs) and github_list_issues (lists issues).
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 guidance on when to use vs alternatives, but the purpose is straightforward. No when-not scenarios or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_create_pull_requestB
Create a pull request in a GitHub repository. Specify source and target branches, title, and body.
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | The branch to merge into (target), e.g. 'main' | |
| body | No | PR description (supports Markdown) | |
| head | Yes | The branch containing changes (source). Use 'user:branch' for cross-fork PRs. | |
| repo | Yes | Repository name | |
| draft | No | Create as a draft PR. Default: false | |
| owner | Yes | Repository owner | |
| title | Yes | Pull request title |
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. However, it only states the basic action and required inputs. It does not disclose behavioral traits such as authentication needs, error handling (e.g., if branches don't exist), rate limits, or what happens upon creation (e.g., triggering CI checks). This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the purpose. It efficiently communicates the core action and key inputs. Although it could benefit from additional context, it is not overly verbose.
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 the high schema coverage and lack of output schema, the description provides the minimum context to understand the tool's input. However, it does not explain the return value (likely the created PR object), error scenarios, or side effects. Adequate but not comprehensive.
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 100% and each property has a description. The description adds no new meaning beyond 'Specify source and target branches, title, and body,' which partially echoes schema labels. Baseline is 3 for high 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 description clearly states the tool's purpose: 'Create a pull request in a GitHub repository.' It specifies the verb ('create'), the resource ('pull request'), and the key parameters (source/target branches, title, body). This distinguishes it from sibling tools like github_create_issue.
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 only describes what it does. The context implies it is for creating pull requests, but lacks guidance on when not to use it or mention of alternative tools like github_create_issue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_get_repo_infoA
Get detailed information about a GitHub repository including stats, languages, recent commits, and contributor count.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (user or org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral disclosure. It implies a read operation ('Get') and lists some returned data, but does not mention potential errors (e.g., private repos), rate limits, or required permissions. The brief list of returned fields adds some value but is not exhaustive.
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 that is concise and front-loads the main purpose. It efficiently communicates the tool's function and the type of information returned, though it could be slightly more precise.
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 the lack of an output schema, the description provides a reasonable overview of the tool's return content (stats, languages, commits, contributors). While not exhaustive, it offers enough context for an agent to understand what information will be retrieved. For a simple tool, this is generally adequate.
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 input schema already provides 100% coverage with descriptions for 'owner' and 'repo'. The description adds no additional semantic meaning for the parameters, so it meets the baseline for high 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 description clearly states the tool retrieves detailed information about a GitHub repository, specifying the resource (repository) and action (get info). It lists specific content (stats, languages, recent commits, contributor count), making the purpose distinct from sibling tools like github_list_repos which list repositories, not details of a specific one.
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 provided on when to use this tool versus alternatives. The description only states what it does, without specifying when it is appropriate (e.g., for a single repo's full details) or when to use other tools (e.g., github_list_repos for listing all repos).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_list_issuesC
List and filter issues in a GitHub repository. Supports state, label, assignee, and keyword search.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| sort | No | Sort order. Default: created | created |
| owner | Yes | Repository owner | |
| state | No | Filter by state. Default: open | open |
| labels | No | Comma-separated list of label names to filter by | |
| assignee | No | Filter by assignee username. Use '*' for any, 'none' for unassigned. | |
| per_page | No | Results per page (1-100). Default: 30 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as rate limits, authentication requirements, pagination behavior, or response format. It only states the basic action without deeper 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, consisting of two sentences that front-load the main purpose. Every sentence adds value 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?
Despite 100% schema coverage, the description misses mentioning required parameters, pagination via per_page, and sort options. The incorrect claim about keyword search further detracts from completeness.
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 inaccurately mentions 'keyword search' which is not a parameter in the schema. While it lists state, label, and assignee, the incorrect addition reduces its value. Schema coverage is 100%, but the description introduces misinformation.
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 lists and filters issues in a GitHub repository, specifying the verb, resource, and scope. It distinguishes from sibling tools like github_create_issue by its listing and filtering functionality.
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 alternatives, nor does it mention contexts where it should not be used. It lacks explicit comparisons or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_list_reposA
List GitHub repositories for the authenticated user or a specific user/org. Returns repo name, description, stars, language, and visibility.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field. Default: updated | updated |
| type | No | Filter by repo type. Default: all | all |
| owner | No | GitHub username or org. Omit to list your own repos. | |
| per_page | No | Results per page (1-100). Default: 30 |
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 correctly indicates read-only behavior (listing) and implies authentication. However, it does not discuss pagination behavior (per_page parameter), rate limits, or error cases (e.g., invalid owner). The description is truthful but lacks depth on edge cases.
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 with two sentences. The first sentence states the primary purpose and scope, and the second lists the return fields. Every word adds value; no redundancy exists.
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 list endpoint with 4 parameters and no output schema, the description is fairly complete. It explains the core functionality and return fields. However, it could mention that results are paginated (implied by per_page) and that the output is an array, but the schema covers per_page details. Minor gap in not stating the return data structure.
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 100% with descriptions already explaining each parameter. The tool description adds no additional parameter meaning beyond what the schema provides. The baseline of 3 is appropriate since the schema already documents parameters thoroughly, including the owner parameter's omission behavior.
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 ('List'), the resource ('GitHub repositories'), and the scope ('for the authenticated user or a specific user/org'). It also lists the return fields (name, description, stars, language, visibility), which distinguishes it from sibling tools like github_get_repo_info (single repo) and github_list_issues (different resource).
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 indicates when to use the owner parameter ('Omit to list your own repos') but does not explicitly mention alternatives or when not to use this tool. Sibling tool names are provided but not referenced, so an agent has no guidance on choosing between this and github_get_repo_info for a specific repository.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_get_emailA
Retrieve details and delivery status of a previously sent email. Returns metadata including delivery timestamps and any error information.
| Name | Required | Description | Default |
|---|---|---|---|
| email_id | Yes | The Resend email ID returned from resend_send_email |
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 mentions returned metadata (timestamps, errors) but does not disclose potential side effects or authorization needs. Since this is a read operation, the transparency 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?
A single sentence that front-loads the purpose and includes necessary context. No wasted words, efficient and clear.
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 retrieval tool with one parameter and no output schema, the description is complete enough. It explains what is returned, though it could optionally mention scope (e.g., only recent emails).
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 100%, providing a baseline of 3. The description adds value by specifying the email ID comes from resend_send_email, which contextualizes the parameter beyond the schema's type definition.
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 retrieves details and delivery status of a previously sent email, using specific verbs and resource. It distinguishes from sending tools like resend_send_email and resend_send_batch.
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 after sending an email, referencing the email ID from resend_send_email. It does not explicitly exclude alternative scenarios, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_send_batchA
Send a batch of up to 100 emails in a single API call.
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | Array of email objects to send in batch. Max 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses max batch size of 100, but no annotations are present and no details on error handling, rate limits, or partial failures.
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?
Single sentence with no wasted words; front-loaded with key 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?
Adequately covers the tool's function given low complexity, no output schema, and no annotations; missing return value details but acceptable.
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 100% and description adds no extra meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses specific verb 'Send' and resource 'batch of up to 100 emails', clearly differentiating from single email sending via sibling tool name.
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?
Implies use for batch emails in one API call, but does not explicitly contrast with resend_send_email or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_send_emailB
Send a transactional email via Resend. Supports plain text and HTML content, multiple recipients, CC, BCC, reply-to, and custom headers.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipient(s) | |
| to | Yes | Recipient email address(es). Can be a single email or an array of emails. | |
| bcc | No | BCC recipient(s) | |
| from | Yes | Sender email address. Must be a verified domain in Resend. Use format "Name <email@domain.com>" or just "email@domain.com". | |
| html | No | HTML body of the email. At least one of text or html is required. | |
| tags | No | Tags for email analytics and categorization | |
| text | No | Plain text body of the email. At least one of text or html is required. | |
| headers | No | Custom email headers as key-value pairs | |
| subject | Yes | Email subject line | |
| reply_to | No | Reply-to email address(es) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as rate limits, authentication requirements, idempotency, or potential side effects. It merely states the action without deeper 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 a single, concise sentence that front-loads the main purpose and lists key capabilities without extraneous words. It is efficient and easy to parse.
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?
Despite having 10 parameters and nested objects, the description omits important context such as expected return value, error handling, and prerequisites (e.g., verified domain). The description is minimal for a tool of this complexity.
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 100%, so the description adds minimal extra meaning beyond the existing parameter descriptions. The tool-level description summarizes the supported features but does not enhance understanding of individual parameters.
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 (send transactional email), the platform (Resend), and lists key capabilities (plain text, HTML, multiple recipients, CC, BCC, reply-to, custom headers). It distinguishes from sibling tools like resend_get_email and resend_send_batch by implication.
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 guidance on when to use this tool versus alternatives such as resend_send_batch for batch emails. The description lists features but does not provide context on prerequisites (e.g., verified domain) or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_add_reactionA
Add an emoji reaction to a Slack message. Useful for acknowledgements, approvals, or status updates.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Emoji name without colons (e.g. 'thumbsup', 'white_check_mark', 'rocket') | |
| channel | Yes | Channel ID containing the message | |
| timestamp | Yes | Timestamp (ts) of the message to react to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the basic action and use cases, omitting details like permissions, idempotency, error handling, or side effects. The parameter descriptions in the schema cover syntax but not 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?
The description is two sentences with no wasted words. The action is front-loaded, and the second sentence provides context. Highly concise.
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 3-parameter action with no output schema, the description covers the purpose and usage context. However, it lacks details on duplicate reactions, rate limits, or authentication, which slightly reduces completeness.
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 100%, with each parameter having a clear description (e.g., 'Emoji name without colons'). The tool description adds no additional meaning beyond the schema, so baseline score 3 applies.
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 'Add an emoji reaction to a Slack message' with a specific verb and resource. It also lists example use cases, distinguishing it from sibling tools like slack_send_message or slack_set_topic.
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 mentions use cases (acknowledgements, approvals, status updates) but does not explicitly state when not to use it or compare to alternatives. However, the context of sibling tools makes the distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_channelsA
List Slack channels the bot has access to. Returns channel name, ID, topic, member count, and purpose.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of channels to return (1-200). Default: 100 | |
| types | No | Comma-separated channel types: public_channel, private_channel, mpim, im. Default: public_channel | public_channel |
| exclude_archived | No | Exclude archived channels. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes a read-only operation and states what is returned. However, it does not disclose potential rate limits, authentication requirements, or behavioral constraints like default scope (public channels only), which is partially covered in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the purpose and return fields without superfluous information. It is front-loaded and efficient.
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 list tool with 3 optional parameters and no output schema, the description is fairly complete. It specifies the returned data. It could mention pagination or error handling, but is adequate for its complexity.
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 100%, so all parameters have descriptions. The tool description does not add additional meaning beyond what the schema provides. Baseline score of 3 is appropriate.
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 verb 'List' and the resource 'Slack channels', and specifies the returned fields (name, ID, topic, member count, purpose). It distinguishes itself from sibling tools like slack_send_message or slack_add_reaction.
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 provide explicit guidance on when to use this tool versus alternatives. It implies the tool is for listing channels, but offers no exclusions or context about 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.
slack_send_messageA
Send a message to a Slack channel or DM. Supports plain text, Markdown (mrkdwn), and thread replies.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Message text. Supports Slack mrkdwn formatting (*bold*, _italic_, `code`, etc.) | |
| channel | Yes | Channel ID (e.g. C01234567) or channel name (e.g. #general). Channel ID is more reliable. | |
| thread_ts | No | Timestamp of a parent message to reply in a thread | |
| unfurl_links | No | Whether to unfurl link previews. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It indicates support for plain text, mrkdwn, and thread replies, but does not disclose potential side effects (e.g., rate limits, file size limits) or authentication requirements beyond the basic 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?
Two sentences: first states purpose, second adds formatting/thread capability. No fluff, information dense, and 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?
With no output schema, the description does not explain return values (e.g., message timestamp). For a messaging tool, this is a minor gap but acceptable given the simplicity and common API understanding.
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 100%, so the schema already documents all parameters. The description adds no additional meaning beyond what is in the schema, meeting the baseline.
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 verb 'Send' and the resource 'a message to a Slack channel or DM', and distinguishes from siblings like slack_add_reaction or slack_list_channels by specifying the core messaging functionality.
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 provide explicit guidance on when to use this tool vs alternatives, but the purpose is self-evident. No exclusions or when-not-to-use conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_set_topicB
Set or update the topic of a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | New channel topic (max 250 characters) | |
| channel | Yes | Channel ID (e.g. C01234567) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It states the tool modifies the topic but omits details like idempotency, error handling, or required permissions. Minimal behavioral 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?
A single sentence of 9 words that directly states the tool's function. No redundant information; every word contributes to clarity.
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 the simplicity of the tool (2 required params, no output schema), the description is minimally adequate. However, it lacks information about return values or confirmation of success, which would be helpful.
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 100%, so both parameters are already documented. The description adds no extra meaning beyond what the input schema provides, justifying the baseline score.
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 specific verb 'Set or update' and identifies the resource 'topic of a Slack channel', clearly distinguishing it from siblings like slack_send_message or slack_add_reaction.
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 on when to use vs alternatives. The description does not state prerequisites, when not to use, or compare to sibling tools. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_check_subscriptionA
Check the subscription status for a Stripe customer. Returns active subscriptions with plan details, billing period, and current status.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by subscription status. Default: all | all |
| customer_id | Yes | The Stripe Customer ID (starts with cus_) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It states the return includes 'plan details, billing period, and current status', indicating a read operation, but does not disclose auth requirements, rate limits, or whether the operation may have side effects.
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 consists of two concise, front-loaded sentences with no redundant information. 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?
Given the tool's simplicity (2 params, no output schema), the description adequately states what the tool returns. It could be enhanced by clarifying if the response is a single subscription or list, but overall complete for a check operation.
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 100% with clear descriptions for both parameters (customer_id and status). The description adds no additional parameter-specific meaning beyond what the schema already provides, so baseline 3 is appropriate.
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 the specific verb 'check' with 'subscription status for a Stripe customer', clearly identifying the resource and action. It distinguishes from sibling tools like stripe_create_customer or stripe_list_customers by focusing on subscription status only.
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 to retrieve subscription information but does not explicitly state when to use it versus alternatives (e.g., listing all subscriptions via other means) or any prerequisites. Usage is implied but no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_create_customerA
Create a new Stripe customer with name, email, phone, and optional metadata. Returns the created customer object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Customer full name | |
| Yes | Customer email address | ||
| phone | No | Customer phone number | |
| metadata | No | Key-value pairs for custom metadata (max 50 keys) | |
| description | No | Internal description/notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Indicates it creates a customer (write operation) and returns the created object. However, no annotations provided, and description lacks details on side effects, idempotency, rate limits, or permissions. Basic transparency but not comprehensive.
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 action and resource. Every word adds value; 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?
No output schema, but description states it returns the created object. For a tool with 5 parameters and no output schema, the description is adequate but lacks details on error handling or idempotency.
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 100%, so the schema already describes all parameters. The description adds that metadata is optional but does not provide additional meaning beyond the schema.
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 verb 'create', the resource 'Stripe customer', and lists the fields (name, email, phone, metadata). It distinguishes from sibling tools like stripe_list_customers which list customers.
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 on when to use this tool versus alternatives (e.g., other Stripe creation tools like stripe_create_invoice). No prerequisites or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_create_invoiceC
Create and optionally finalize/send an invoice for a Stripe customer. Add line items with descriptions and amounts.
| Name | Required | Description | Default |
|---|---|---|---|
| memo | No | Internal memo or note | |
| items | Yes | Invoice line items | |
| auto_send | No | Automatically finalize and send the invoice. Default: false | |
| customer_id | Yes | Stripe Customer ID (cus_...) | |
| days_until_due | No | Number of days until invoice is due. Default: 30 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only hints at optional finalization. It does not disclose side effects (e.g., email sending, invoice finalization irreversibility) or safety implications of creating an invoice.
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 are efficient, but the second sentence is somewhat redundant with the schema. There is no wasted text, but it could be slightly more informative without adding length.
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 functionality but omits details like return value (invoice ID or status), and the draft vs finalized behavior is only implied. For a creation tool with no output schema, more context would be helpful.
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 100%, so baseline applies. The description adds little beyond the schema; it mentions line items with descriptions and amounts, but this is already explicit in the schema.
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 creates an invoice and optionally finalizes/sends it, with line items. However, it does not differentiate from other Stripe tools like stripe_create_payment_link, which are siblings.
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 on when to use this tool versus alternatives. There is no mention of prerequisites or scenarios where it is appropriate, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_create_payment_linkA
Create a Stripe Payment Link for a given price. Returns a shareable URL that customers can use to pay.
| Name | Required | Description | Default |
|---|---|---|---|
| price_id | Yes | The Stripe Price ID to create a payment link for (starts with price_) | |
| quantity | No | Quantity of the item. Default: 1 | |
| after_completion_url | No | URL to redirect customers to after successful payment | |
| allow_promotion_codes | No | Whether to allow promotion codes on this payment link |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states it creates a payment link and returns a URL, but with no annotations, it lacks details on side effects, permissions, or limits. Adequate but not thorough.
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 concise sentences with action and result front-loaded. 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?
Mentions return value (URL). Parameters are documented in schema. Lacks info on errors or rate limits, but adequate for a simple creation tool.
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 100%, so baseline is 3. Description adds no extra meaning beyond schema; 'for a given price' aligns with required price_id.
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?
Clear verb (create), resource (Stripe Payment Link for a given price), and outcome (returns a shareable URL). Distinguishes from sibling tools like stripe_create_invoice.
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 guidance on when to use this tool versus alternatives like stripe_create_invoice or stripe_create_customer. No when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_get_balanceA
Get the current Stripe account balance. Shows available and pending funds across all currencies.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It indicates a read-only operation via 'Get' and 'Shows', which is accurate. However, it does not disclose authentication requirements, rate limits, or behavior on failure, but given the simplicity (zero parameters), this is minimally sufficient.
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: two sentences, front-loaded with the core action, and no extraneous information. Every word serves a purpose.
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 balance retrieval tool with no parameters and no output schema, the description adequately covers what the tool does and what information it returns. It is complete given the 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 tool has zero parameters, and the schema coverage is 100% by default. The description adds value by explaining the return content (available/pending funds across currencies), which compensates for the lack of an output schema.
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 retrieves the current Stripe account balance, specifying it shows available and pending funds across all currencies. This verb+resource combination distinctly separates it from sibling Stripe tools that handle customers, refunds, invoices, etc.
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 usage guidelines are provided, but the tool's purpose is straightforward and there are no sibling tools with overlapping functionality for balance retrieval. The context implies its use for checking account balances without needing alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_issue_refundA
Issue a full or partial refund for a Stripe charge or payment intent. Returns refund details and status.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Amount to refund in cents. Omit for full refund. | |
| charge | No | Charge ID (ch_...). Provide this or payment_intent, not both. | |
| reason | No | Reason for the refund | |
| payment_intent | No | Payment Intent ID (pi_...). Provide this or charge, not both. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states the tool returns refund details and status, but omits side effects (reversing a charge), idempotency, authorization requirements, or error conditions. Basic transparency is present but lacks depth.
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 succinct sentences: first defines purpose, second describes output. No extraneous words. Front-loaded for quick parsing.
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 4 simple parameters and no output schema, the description covers the core action and return value. However, it could provide more context on error handling or idempotency for a mutation tool. Still, it is fairly complete for typical use.
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 parameter descriptions already cover all 4 parameters (100% coverage). The tool description adds no new semantic information beyond what the schema provides, so it meets the baseline expectation but does not exceed it.
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 ('Issue...refund'), specifies the target ('charge or payment intent'), and indicates whether it is full or partial. It uniquely identifies the tool among siblings, all of which are different Stripe operations.
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 implicitly indicates when to use the tool (to issue a refund) and provides a constraint (provide charge or payment_intent, not both). However, it does not explicitly state when not to use it or mention alternative tools, but there are no sibling refund tools to confuse with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_list_customersB
List Stripe customers with optional filters. Returns customer ID, name, email, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Filter customers by exact email address | ||
| limit | No | Number of customers to return (1-100). Default: 10 | |
| starting_after | No | Cursor for pagination — pass the last customer ID from the previous page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose behavioral traits such as read-only nature, authentication needs, rate limits, or side effects. Only states it returns specific fields.
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?
Description is a single efficient sentence (11 words) that is front-loaded with the action and resource.
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?
Missing explanation of return format (list vs single), pagination behavior beyond schema, and ordering. With no output schema, the description should provide more detail on return values.
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 100%, so baseline is 3. Description adds no additional meaning beyond schema; merely mentions 'optional filters' without detailing parameters.
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?
Description clearly states action (List), resource (Stripe customers), and mentions optional filters, distinguishing it from sibling tools like stripe_create_customer or stripe_check_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?
No guidance on when to use this tool vs alternatives, nor any when-not-to-use or prerequisites. Only implied usage for listing customers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stripe_list_productsA
List Stripe products with their prices. Useful for browsing your catalog or finding Price IDs for payment links.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of products to return (1-100). Default: 20 | |
| active | No | Only return active products. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries the burden. It states the action (list) and the data included (prices) but does not mention pagination, authentication, or rate limits. For a read-only list operation, this is adequate but not rich.
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, no wasted words. Purpose and usage are front-loaded. Highly concise.
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?
No output schema, but description indicates it returns products with prices. For a simple list tool, this is sufficient. However, could be improved by noting the return structure or pagination behavior.
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 covers both parameters (limit, active) with descriptions, achieving 100% coverage. Description adds no extra meaning beyond the schema, so baseline of 3 is appropriate.
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?
Description clearly states verb 'List' and resource 'Stripe products with their prices', which distinguishes it from sibling tools like stripe_list_customers. It also mentions specific use cases (browsing catalog, finding Price IDs), adding clarity.
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?
Provides context on when to use the tool ('browsing your catalog or finding Price IDs for payment links'). Implicitly distinguishes from other Stripe tools but lacks explicit exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twilio_check_message_statusB
Check the delivery status of a previously sent Twilio SMS message. Returns current status, error info (if any), and pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| message_sid | Yes | The Twilio Message SID to look up (starts with SM) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description mentions return values (status, error info, pricing) but does not state that this is a read-only operation or disclose any side effects, permissions, or rate limits. Adequate for a simple check but could be more explicit.
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 concise sentences, front-loaded with purpose. Every word adds value, with no extraneous 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?
The tool is simple with one parameter and no output schema. The description covers the main purpose and return info. But it omits prerequisites (e.g., need a message SID from sending) and does not specify output format, which would be helpful.
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 100% with a clear description for message_sid (starts with SM). The tool description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
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 verb ('Check') and resource ('delivery status of a previously sent Twilio SMS message'). It distinguishes from siblings like twilio_send_sms and twilio_list_messages, though not 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 explicit guidance on when to use this tool versus alternatives. It implies the message was previously sent but doesn't specify prerequisites or when not to use it, e.g., compared to twilio_list_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twilio_list_messagesB
List recent SMS messages with optional filters. View sent and received message history with status and pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Filter by recipient phone number | |
| from | No | Filter by sender phone number | |
| limit | No | Number of messages to return (1-100). Default: 20 | |
| date_sent_after | No | Only include messages sent after this date (ISO 8601, e.g. 2024-01-01) | |
| date_sent_before | No | Only include messages sent before this date (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It only states that it lists recent messages and includes status/pricing, but does not disclose side effects, rate limits, authentication requirements, or return format. For a read operation, this is 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 sentence of 15 words, front-loaded with the main action, and contains no unnecessary 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?
Despite having 5 parameters, no required parameters, and no output schema, the description does not explain the return format, pagination behavior, or time range semantics. For a listing tool, more completeness 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?
Schema coverage is 100%, so the schema already documents all parameters. The description adds marginal value by saying 'optional filters' but does not provide additional meaning beyond what is in the schema. Baseline 3 is appropriate.
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 verb 'List', resource 'SMS messages', and mentions the data included (status, pricing). It distinguishes from sibling tools like twilio_send_sms and twilio_make_call, which are write operations.
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 mentions 'optional filters' but provides no explicit guidance on when to use this tool versus alternatives like twilio_check_message_status. The usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twilio_make_callB
Initiate an outbound voice call via Twilio. The call is connected and plays the specified TwiML or reads text aloud via text-to-speech.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Phone number to call in E.164 format | |
| say | No | Text-to-speech message to play when the call is answered. Ignored if twiml is provided. | |
| from | No | Override caller phone number. Defaults to TWILIO_PHONE_NUMBER. | |
| twiml | No | TwiML instructions for the call. If omitted, use the 'say' parameter instead. | |
| record | No | Record the call. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for disclosing behavioral traits. It mentions connecting and playing TTS/TwiML but omits details like rate limits, costs, authentication requirements, error handling, or what happens on failure. A score of 2 is appropriate for this under-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?
The description is two concise sentences with no wasted words. It front-loads the core action and directly informs the agent of the tool's primary function.
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 the 5 parameters (100% schema coverage) and no output schema, the description explains the basic flow but lacks details on return values (e.g., call SID), prerequisites (Twilio account, phone number), and error scenarios. It is minimally adequate but incomplete for a full understanding.
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 100%, so baseline is 3. The description adds value by summarizing the purpose of 'say' and 'twiml' (e.g., 'reads text aloud via text-to-speech'), but does not provide additional meaning beyond the schema's property 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 clearly states the action ('Initiate an outbound voice call') and the resource ('via Twilio'), and specifies that it plays TwiML or uses TTS. This distinguishes it from sibling tools like twilio_send_sms (SMS) and twilio_list_messages (list).
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 alternatives, such as when to prefer the 'twiml' parameter over 'say', or when to use twilio_send_sms for voice calls. No when-not-to-use or exclusionary context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twilio_send_smsA
Send an SMS message via Twilio. Returns the message SID, status, and price estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient phone number in E.164 format (e.g. +15551234567) | |
| body | Yes | The text content of the SMS message (max 1600 characters) | |
| from | No | Override the sender phone number. Defaults to TWILIO_PHONE_NUMBER env var. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It mentions sending a message and returns, but does not disclose authentication requirements, potential costs, error handling, or asynchronous 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?
The description is two sentences, front-loads the purpose, and contains no extraneous 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?
For a simple tool, it adequately describes the action and return values, but lacks context on rate limits, cost implications, or when to use this over other messaging tools. No output schema, but return values are mentioned.
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 100%, so the description adds no extra value beyond the parameter descriptions already provided in the schema. Baseline 3 applies.
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 'Send an SMS message via Twilio' and specifies the return values (SID, status, price estimate). It is distinct from sibling Twilio tools like twilio_check_message_status and twilio_make_call.
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 on when to use this tool vs. alternatives like email or Slack messaging. No prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v1.0.0- First observed
github_create_issue - First observed
github_create_pull_request - First observed
github_get_repo_info - First observed
github_list_issues - First observed
github_list_repos - First observed
resend_get_email - First observed
resend_send_batch - First observed
resend_send_email - First observed
slack_add_reaction - First observed
slack_list_channels - First observed
slack_send_message - First observed
slack_set_topic - First observed
stripe_check_subscription - First observed
stripe_create_customer - First observed
stripe_create_invoice - First observed
stripe_create_payment_link - First observed
stripe_get_balance - First observed
stripe_issue_refund - First observed
stripe_list_customers - First observed
stripe_list_products - First observed
twilio_check_message_status - First observed
twilio_list_messages - First observed
twilio_make_call - First observed
twilio_send_sms
TDQS
Scored across 24 tools
Each tool is clearly scoped to a specific service and action, with no overlap across services or within service groups. For example, github_create_issue and github_list_issues are distinct, and tools from different services (e.g., Slack vs. Twilio) address unrelated domains.
All tools follow a consistent service_verb_noun pattern using snake_case (e.g., stripe_get_balance, slack_send_message). The service prefix provides immediate context, and verbs (create, get, list, send) are uniformly applied.
With 24 tools across five SaaS services, the count is slightly high but appropriate for a 'toolkit' that aims to cover common operations for each integration. Each service has a focused subset (3-8 tools), avoiding excessive bloat while providing meaningful functionality.
Each service covers core operations but lacks update/delete endpoints (e.g., GitHub has no update_issue, Stripe no update_customer). While the basics for reading and creating are present, notable gaps in lifecycle management will force agents to rely on other means for modifications.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA comprehensive MCP server providing over 390 tools across 66 providers, including major SaaS platforms like GitHub, Slack, and Stripe. It enables AI assistants to interact directly with a wide array of public APIs and utility services through a single interface.-
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server that provides AI assistants with comprehensive GitHub developer tooling including PR analysis, code review, changelog generation, dependency auditing, commit summarization, and refactoring suggestions.22ISC
- FlicenseNot gradedqualityDmaintenanceA production-ready MCP server with tools for weather, calculator, and mock database queries, plus resources and prompt templates, featuring a glassmorphism admin dashboard and WebSocket support.-
- FlicenseNot gradedqualityDmaintenanceA production-ready MCP server with demo tools (calculator, web search, web fetch) and a Playground UI for interactive testing.-