Skip to main content
Glama

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 Slack

  • invoice_reminder: Check Stripe subscription → Create invoice → Email/SMS customer

  • incident_report: Create GitHub issue → Alert Slack → Email stakeholders

  • new_release: Fetch recent commits → Create GitHub issue → Announce on Slack

📊 MCP Resources (Live Feeds):

  • saas://stripe/balance: Read current Stripe account balance

  • saas://stripe/recent-charges: Fetch recent charges instantly

  • saas://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-toolkit

Copy 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.js

Available Tools

24 tools
github_create_issueB

Create a new issue in a GitHub repository. Supports labels, assignees, and milestone.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoIssue body (supports Markdown)
repoYesRepository name
ownerYesRepository owner
titleYesIssue title
labelsNoLabels to apply (must already exist in the repo)
assigneesNoGitHub usernames to assign
milestoneNoMilestone number to associate with

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseYesThe branch to merge into (target), e.g. 'main'
bodyNoPR description (supports Markdown)
headYesThe branch containing changes (source). Use 'user:branch' for cross-fork PRs.
repoYesRepository name
draftNoCreate as a draft PR. Default: false
ownerYesRepository owner
titleYesPull request title

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: '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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
ownerYesRepository owner (user or org)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name
sortNoSort order. Default: createdcreated
ownerYesRepository owner
stateNoFilter by state. Default: openopen
labelsNoComma-separated list of label names to filter by
assigneeNoFilter by assignee username. Use '*' for any, 'none' for unassigned.
per_pageNoResults per page (1-100). Default: 30

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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

The description clearly states the tool lists 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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort field. Default: updatedupdated
typeNoFilter by repo type. Default: allall
ownerNoGitHub username or org. Omit to list your own repos.
per_pageNoResults per page (1-100). Default: 30

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
email_idYesThe Resend email ID returned from resend_send_email

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailsYesArray of email objects to send in batch. Max 100.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC recipient(s)
toYesRecipient email address(es). Can be a single email or an array of emails.
bccNoBCC recipient(s)
fromYesSender email address. Must be a verified domain in Resend. Use format "Name <email@domain.com>" or just "email@domain.com".
htmlNoHTML body of the email. At least one of text or html is required.
tagsNoTags for email analytics and categorization
textNoPlain text body of the email. At least one of text or html is required.
headersNoCustom email headers as key-value pairs
subjectYesEmail subject line
reply_toNoReply-to email address(es)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEmoji name without colons (e.g. 'thumbsup', 'white_check_mark', 'rocket')
channelYesChannel ID containing the message
timestampYesTimestamp (ts) of the message to react to

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of channels to return (1-200). Default: 100
typesNoComma-separated channel types: public_channel, private_channel, mpim, im. Default: public_channelpublic_channel
exclude_archivedNoExclude archived channels. Default: true

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesMessage text. Supports Slack mrkdwn formatting (*bold*, _italic_, `code`, etc.)
channelYesChannel ID (e.g. C01234567) or channel name (e.g. #general). Channel ID is more reliable.
thread_tsNoTimestamp of a parent message to reply in a thread
unfurl_linksNoWhether to unfurl link previews. Default: true

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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

With no output schema, the description 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesNew channel topic (max 250 characters)
channelYesChannel ID (e.g. C01234567)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by subscription status. Default: allall
customer_idYesThe Stripe Customer ID (starts with cus_)

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

The description implies the tool is 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCustomer full name
emailYesCustomer email address
phoneNoCustomer phone number
metadataNoKey-value pairs for custom metadata (max 50 keys)
descriptionNoInternal description/notes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoNoInternal memo or note
itemsYesInvoice line items
auto_sendNoAutomatically finalize and send the invoice. Default: false
customer_idYesStripe Customer ID (cus_...)
days_until_dueNoNumber of days until invoice is due. Default: 30

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_get_balanceA

Get the current Stripe account balance. Shows available and pending funds across all currencies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoAmount to refund in cents. Omit for full refund.
chargeNoCharge ID (ch_...). Provide this or payment_intent, not both.
reasonNoReason for the refund
payment_intentNoPayment Intent ID (pi_...). Provide this or charge, not both.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoFilter customers by exact email address
limitNoNumber of customers to return (1-100). Default: 10
starting_afterNoCursor for pagination — pass the last customer ID from the previous page

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of products to return (1-100). Default: 20
activeNoOnly return active products. Default: true

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_sidYesThe Twilio Message SID to look up (starts with SM)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoFilter by recipient phone number
fromNoFilter by sender phone number
limitNoNumber of messages to return (1-100). Default: 20
date_sent_afterNoOnly include messages sent after this date (ISO 8601, e.g. 2024-01-01)
date_sent_beforeNoOnly include messages sent before this date (ISO 8601)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesPhone number to call in E.164 format
sayNoText-to-speech message to play when the call is answered. Ignored if twiml is provided.
fromNoOverride caller phone number. Defaults to TWILIO_PHONE_NUMBER.
twimlNoTwiML instructions for the call. If omitted, use the 'say' parameter instead.
recordNoRecord the call. Default: false

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRecipient phone number in E.164 format (e.g. +15551234567)
bodyYesThe text content of the SMS message (max 1600 characters)
fromNoOverride the sender phone number. Defaults to TWILIO_PHONE_NUMBER env var.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 24 tool updatesv1.0.0
    • First observedgithub_create_issue
    • First observedgithub_create_pull_request
    • First observedgithub_get_repo_info
    • First observedgithub_list_issues
    • First observedgithub_list_repos
    • First observedresend_get_email
    • First observedresend_send_batch
    • First observedresend_send_email
    • First observedslack_add_reaction
    • First observedslack_list_channels
    • First observedslack_send_message
    • First observedslack_set_topic
    • First observedstripe_check_subscription
    • First observedstripe_create_customer
    • First observedstripe_create_invoice
    • First observedstripe_create_payment_link
    • First observedstripe_get_balance
    • First observedstripe_issue_refund
    • First observedstripe_list_customers
    • First observedstripe_list_products
    • First observedtwilio_check_message_status
    • First observedtwilio_list_messages
    • First observedtwilio_make_call
    • First observedtwilio_send_sms

TDQS

A3.6/5.0

Scored across 24 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    22
    ISC
  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    -