GitHub + Linear Dev Workflows
Provides tools for interacting with GitHub repositories, issues, pull requests, releases, security alerts, and CI workflows; enables workflows like linking PRs to Linear issues, creating issues from failing CI, and tracking stale reviews.
Provides OAuth-based access to Google services; supports workflows involving Google Docs, Google Calendar, and Google Sheets.
Provides tools for reading and creating Google Calendar events; used for on-call handoffs, postmortem review dates, and scheduling.
Provides tools for creating and reading Google Docs; used for incident postmortems, design notes, and repo onboarding documentation.
Provides tools for reading and writing Google Sheets; used for flaky test ledgers, CI spend reports, and TODO/FIXME debt registers.
Provides tools for interacting with Linear issues, teams, projects, and cycles; enables creating and updating issues, linking work items, and syncing GitHub, CI, Slack, and postmortem actions into Linear.
Provides tools for creating and updating Notion pages and databases; enables changelogs, dependency records, and engineering wiki content from GitHub docs.
Provides tools for sending messages, posting alerts, reading threads, and managing Slack channels; enables notifications, standup digests, bug reports, deploy approvals, and incident timelines.
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., "@GitHub + Linear Dev WorkflowsTurn the failing CI on main into a Linear bug with the log excerpt 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.
GitHub + Linear Dev Workflows
CI failures, PRs and security alerts become Linear issues and Slack posts, evidence attached.
An MCP server with 25 workflows across GitHub, Linear, Slack, Notion, Google Docs, Google Calendar, Firecrawl, Google Sheets and Tavily. Each workflow is a prompt your agent runs as a slash command, over the 59 tools it needs and no others.
uv tool install https://github.com/r28ai/github-linear-mcp/releases/download/v0.1.0/github_linear_mcp-0.1.0-py3-none-any.whl
claude mcp add dev -- github-linear-mcpIt installs with uv from this repository's release, with no git and nothing to build; nothing but Charter and the libraries it uses comes from PyPI. To update, run the install line from the latest release. If a desktop app cannot find github-linear-mcp, give it the full path from which github-linear-mcp (where github-linear-mcp on Windows).
Then ask your agent to connect your apps, or run /mcp__dev__setup.
Connect your apps
Ask the agent to connect one ("connect Linear"). It tells you where to get that app's key and the command that stores it, and the next call works, with no restart. The agent never asks for a key in the chat.
Or connect everything this server uses from a terminal:
github-linear-mcp login # each app in turn
github-linear-mcp login github # just one
github-linear-mcp status # what is connectedTokens and keys go to your operating system's keychain (macOS Keychain, Windows Credential Manager, the Secret Service on Linux), and are checked with one read-only call to the app's own API before they are kept. Every key, token and OAuth client is yours: we register no app with any of these services, and nothing passes through a server of ours, because there isn't one.
App | How it connects | Or set |
GitHub | Your own key (get one), entered once. |
|
Linear | Your own key (get one), entered once. |
|
Slack | Your own key (get one), entered once. A bot token from your own Slack app, which the guide sets up in about three minutes. |
|
Notion | Your own key (get one), entered once. Then share the pages it should see with the integration. |
|
Browser sign-in, over your own OAuth client (make one). |
| |
Firecrawl | Your own key (get one), entered once. |
|
Tavily | Your own key (get one), entered once. |
|
A variable set in your client's config always wins over the keychain.
Related MCP server: MCP Setup Server
Workflows
Workflow | What you get | Apps |
Failing CI → bug with the log excerpt | A red main branch becomes an owned issue with the failing step quoted, not a channel ping. | GitHub, Linear, Slack |
Link every PR to its Linear issue | No orphan PRs, so cycle reports and changelogs stop missing work. | GitHub, Linear |
Security alerts → Linear | Critical alerts get owners and due dates in the tracker the team actually reads. | GitHub, Linear |
Leaked secret → page a human | An exposed key is an urgent issue and a loud message within minutes. | GitHub, Linear, Slack |
Release → changelog page and announcement | Every release has a readable changelog without a release manager writing it. | GitHub, Notion, Slack |
Standup digest per person | Yesterday's PRs and today's issues in a DM, so standup is about blockers. | GitHub, Linear, Slack |
Stale review nudger | PRs waiting more than a day get a polite DM to the right reviewer. | GitHub, Slack |
Linear issue → branch and draft PR | Starting work on an issue sets up the branch, the PR and the link. | Linear, GitHub |
Incident timeline → postmortem draft | The timeline is assembled from what happened, and action items are tracked from minute one. | Slack, GitHub, Google Docs, Linear |
Postmortem actions tracked to done | Follow-ups from the postmortem become linked issues with a review date. | Google Docs, Linear, Google Calendar |
Slack bug report → Linear | The thread becomes an issue with repro steps, and the thread gets the link. | Slack, Linear |
GitHub issues mirrored into Linear | Open-source reports enter the internal tracker without double triage. | GitHub, Linear |
Vendor deprecation → affected files | A deprecation notice arrives already mapped to the code that uses the old API. | Firecrawl, GitHub, Linear |
On-call handoff | The next on-call starts with open urgents and unread alerts in one message. | Google Calendar, Linear, GitHub, Slack |
Deploy approval from Slack | Production deploys gated on an explicit 'approve' in a thread, with the reviewer on record. | GitHub, Slack |
Flaky test ledger | Tests that fail and pass on retry get counted until one crosses the line and gets an issue. | GitHub, Google Sheets, Linear |
CI spend report | Which workflows burn the minutes, weekly, before the bill does it. | GitHub, Google Sheets, Slack |
PR → design note in Docs | A large PR gets a readable explanation for reviewers outside the team. | GitHub, Google Docs |
Dependency choice with real repo health | Library choices recorded with stars, activity and bus factor, not vibes. | Tavily, GitHub, Notion |
Slack debate → ADR in the repo | The decision and its reasons get committed next to the code they govern. | Slack, GitHub, Linear |
Repo onboarding doc | A new engineer gets a map of an unfamiliar repo and who to ask. | GitHub, Google Docs |
Stale PR cleanup | Month-old PRs are closed with a note and the author is told, so the queue means something. | GitHub, Slack |
TODO/FIXME debt register | Debt hiding in comments becomes a list someone can prioritise. | GitHub, Linear, Google Sheets |
Repo docs → engineering wiki | The wiki mirrors docs/ in the repo instead of drifting from it. | GitHub, Notion, Slack |
Release credits for contributors | Every release thanks the people who made it, by name. | GitHub, Slack |
Every prompt takes one optional argument, details: the repo, team, channel, customer or date range you mean, so the agent does not have to ask. In Claude Code, put it in quotes, or only its first word arrives:
/mcp__dev__failing_ci_to_bug_with_the_log_excerpt "repo acme/api, Linear team ENG, post in #eng-alerts"Reads run without asking. Before anything that creates, sends, changes or deletes, the prompt tells the agent to show you the call and wait.
17 of the 25 workflows need no Google or Granola credential.
Other clients
Claude Desktop: install uv if you have not, since Claude Desktop starts the server with it, then open the .mcpb from the latest release. Claude asks for any keys in its own settings and keeps them in your keychain. The first start takes a few seconds longer, while uv installs it.
VS Code (.vscode/mcp.json): VS Code asks for each key the first time the server starts and stores it securely. Leave out any you stored with login.
{
"inputs": [
{
"type": "promptString",
"id": "github-token",
"description": "GitHub: Personal access token",
"password": true
},
{
"type": "promptString",
"id": "linear-api-key",
"description": "Linear: Personal API key",
"password": true
},
{
"type": "promptString",
"id": "slack-bot-token",
"description": "Slack: Bot token (xoxb-\u2026)",
"password": true
},
{
"type": "promptString",
"id": "notion-api-key",
"description": "Notion: Integration secret (ntn_\u2026)",
"password": true
},
{
"type": "promptString",
"id": "google-client-secret",
"description": "Google: OAuth client secret",
"password": true
},
{
"type": "promptString",
"id": "firecrawl-api-key",
"description": "Firecrawl: API key",
"password": true
},
{
"type": "promptString",
"id": "tavily-api-key",
"description": "Tavily: API key",
"password": true
}
],
"servers": {
"dev": {
"type": "stdio",
"command": "github-linear-mcp",
"env": {
"GITHUB_TOKEN": "${input:github-token}",
"LINEAR_API_KEY": "${input:linear-api-key}",
"SLACK_BOT_TOKEN": "${input:slack-bot-token}",
"NOTION_API_KEY": "${input:notion-api-key}",
"GOOGLE_CLIENT_SECRET": "${input:google-client-secret}",
"FIRECRAWL_API_KEY": "${input:firecrawl-api-key}",
"TAVILY_API_KEY": "${input:tavily-api-key}",
"GOOGLE_CLIENT_ID": ""
}
}
}
}Cursor (.cursor/mcp.json) starts it the same way:
{
"mcpServers": {
"dev": {
"command": "github-linear-mcp"
}
}
}Codex (~/.codex/config.toml) starts a turn without waiting for a server unless it is required, and then the agent has none of its tools. required = true makes the session wait for it, and startup_readiness = "catalog" waits for its tool list rather than just its connection:
[mcp_servers.dev]
command = "github-linear-mcp"
required = true
startup_readiness = "catalog"
startup_timeout_sec = 30Name the server dev. A host builds each tool's name from that key, and a longer one can push a tool past the 64 characters a function name allows.
Built with Charter
Every tool here is a Charter declaration: a Pydantic schema saying where each field goes on the wire. Charter's runtime builds the request, attaches and refreshes the credential, and trims the response before the model reads it. It runs in your process, with no proxy and no telemetry.
The 59 tool schemas come to 57,249 tokens.
The same tools work in your own agent, without MCP:
from charter.adapters.openai import to_openai_tools
from charter_packs_mcp import FAMILIES
tools = FAMILIES["engineering"].tools()
definitions = to_openai_tools(tools) # or charter.adapters.langchainNeed an API that isn't here? Write a pack: your coding agent writes the declarations, and Charter's conformance suite checks them.
GitHub:
github_actions_list_workflow_runs,github_actions_list_jobs_for_run,github_actions_download_job_logs,github_pulls_list,github_dependabot_list_alerts,github_code_scanning_list_alerts,github_secret_scanning_list_alerts,github_releases_get_latest,github_repos_compare_commits,github_search_issues,github_pulls_list_requested_reviewers,github_git_refs_get,github_git_refs_create,github_pulls_create,github_repos_list_commits,github_issues_list_for_repo,github_issues_create_comment,github_search_code,github_notifications_list,github_actions_list_pending_deployments,github_actions_review_pending_deployments,github_actions_list_runs_for_workflow,github_checks_list_annotations,github_actions_get_run_usage,github_pulls_get,github_pulls_list_files,github_pulls_get_diff,github_search_repositories,github_repos_get,github_repos_list_contributors,github_repos_create_or_update_file,github_repos_get_readme,github_repos_list_languages,github_pulls_update,github_repos_get_content,github_releases_updateLinear:
linear_issue_create,linear_attachments_for_url,linear_search_issues,linear_attachment_create,linear_issues_list,linear_issue_get,linear_issue_relation_createSlack:
slack_chat_post_message,slack_conversations_open,slack_users_list,slack_conversations_history,slack_conversations_repliesNotion:
notion_pages_create,notion_pages_update_markdownGoogle Docs:
gdocs_documents_create,gdocs_documents_getGoogle Calendar:
gcalendar_events_insert,gcalendar_events_listFirecrawl:
firecrawl_monitor_create,firecrawl_monitor_checks_listGoogle Sheets:
gsheets_spreadsheets_values_append,gsheets_spreadsheets_values_updateTavily:
tavily_search
License
Apache 2.0.
Available Tools
61 toolsconnectA
Connect one app this server uses. For an app that issues keys, says where to get one and the terminal command that stores it. For Google, once the user's own OAuth client is set, starts the browser sign-in and returns at once: the user approves in the browser and the next call works. To see which apps are connected, call connection_status. Never ask the user for a key in the chat.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | The app to connect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and openWorldHint=false, so the description carries most of the burden and does so well: it discloses that the Google path kicks off a browser sign-in and returns immediately rather than blocking, and that the next call succeeds after user approval. It also implies the tool emits instructions for key-based apps. It does not say whether connecting is idempotent, what happens on an existing connection, or how failures surface.
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?
Front-loaded with the core action, then the per-app variations, then the alternative and the safety rule. Every sentence carries information, though the phrasing around the key-storage command is slightly convoluted and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter setup tool with no output schema and minimal annotations, the description covers the branches (key apps vs Google OAuth), the async return behavior, the sibling alternative, and a security constraint. Only edge cases such as re-connecting or already-connected apps are left unspecified, which is a minor gap.
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 the single enum parameter is fully enumerated in the schema, so the description need not restate valid values. 'One app this server uses' adds mild framing but no syntax or format detail beyond the schema, which matches the baseline 3 for a fully documented single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Connect one app this server uses' gives a specific verb and resource, and the enum of seven apps bounds the scope precisely. It also names the sibling connection_status as the way to inspect state, so the agent can separate the two tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the alternative explicitly ('To see which apps are connected, call connection_status') and gives a hard behavioral rule ('Never ask the user for a key in the chat'). What is missing is an explicit when-not-to-call (e.g. what happens if the app is already connected, or whether re-connecting is safe).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_statusARead-only
See which apps this server is connected to, and how to connect each one that is not. Changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered by structured data. 'Changes nothing' restates the readOnly hint rather than adding new behavior; the only incremental value is noting that connect instructions are returned for unconnected apps.
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 tight sentence that front-loads the primary purpose and appends the secondary benefit with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, read-only status tool with no output schema, the description covers both what is inspected and the shape of the useful payload (connect guidance). Return format details are absent but minimal 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 takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate, and it correctly implies no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('See') and resource ('which apps this server is connected to'), and adds the secondary payload of connect instructions for missing apps. This distinguishes it from the sibling 'connect' tool, which performs the connection rather than reporting status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'how to connect each one that is not' implies this tool is the discovery step before using 'connect', but the sibling is never named and there is no explicit when-to-use/when-not statement. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
firecrawl_monitor_checks_listCRead-onlyIdempotent
List checks for a monitor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum checks to return. The server applies 25 when this is absent. | |
| offset | No | Number of checks to skip. The server applies 0 when this is absent. | |
| status | No | Filter checks by status. | |
| monitorId | Yes | The monitor ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered externally. The description adds nothing beyond them: no note on ordering, pagination behavior, or what a check record contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though its brevity borders on under-specification for a tool with paging and status filters.
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 read-only list tool whose schema fully documents its four parameters and whose annotations cover safety, this is roughly adequate. It omits return-shape or ordering context, but with no output schema and a simple contract, that gap is modest.
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%, and the schema itself documents limit (default 25), offset (default 0), status enum values, and monitorId. The one-line description contributes no additional parameter meaning, so the baseline of 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?
States a specific verb (List) and resource (checks) scoped to a monitor, which is enough to distinguish it from firecrawl_monitor_create. It does not, however, explicitly contrast itself with any sibling tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites, and no alternatives. An agent must infer from the name alone that this is the read path for monitor check history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
firecrawl_monitor_createB
Create a scheduled monitor for scrape, crawl, or search targets.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | Plain-language goal used to judge whether changed pages are meaningful. | |
| name | Yes | Monitor name. | |
| targets | Yes | Targets to run on each check. | |
| webhook | No | Webhook destination for monitor events. | |
| schedule | Yes | Schedule for monitor checks. | |
| judgeEnabled | No | Whether to judge changed pages against goal. | |
| notification | No | Notification destinations. | |
| retentionDays | No | How long to retain monitor history. The server applies 30 when this is absent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, so the mutation and external-reach profile is already covered; the description's 'create' is consistent with these and adds no contradiction. It adds only the notion that the created object is scheduled/recurring, but says nothing about lifecycle, cost, or persistence beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, correctly leading with the verb and the resource. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex creation tool with required schedule/targets, nested target union types, webhooks, notifications, retention, and an optional judge/goal mechanism, and no output schema to fall back on. The one-line description does not explain what a monitor does over time or what happens after creation, leaving significant gaps for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters (schedule, targets, webhook, judgeEnabled, notification, retentionDays, goal, name) are already documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so the 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 states a specific verb and resource ('Create a scheduled monitor') and scopes it to the three target kinds the schema supports (scrape, crawl, search). It implicitly separates this from the one-off firecrawl_scrape/firecrawl_crawl siblings via 'scheduled,' but never names them, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. that monitors run repeatedly and incur ongoing credit usage), and no pointer to alternatives like firecrawl_crawl or firecrawl_crawl_status for one-off jobs. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gcalendar_events_insertC
Create a calendar event; returns details of the event.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | The event to insert. | |
| calendarId | Yes | Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. | |
| sendUpdates | No | Guests who should receive notifications about the change. Acceptable values are: "all" (notifications are sent to all guests), "externalOnly" (notifications are sent to non-Google Calendar guests only), "none" (no notifications are sent; for calendar migration tasks, consider using the Events.import method instead). | |
| maxAttendees | No | The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional. | |
| eventLabelVersion | No | Version number of the event label feature supported by the API client. Version 0 assumes no event label support and processes the colorId field for color management. Version 1 enables support for event labels, and processes the eventLabelId in the event's body. In this case, the colorId field is ignored. The default is 0. Acceptable values are 0 to 1, inclusive. | |
| supportsAttachments | No | Whether API client performing operation supports event attachments. Optional. The default is False. | |
| conferenceDataVersion | No | Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0. Acceptable values are 0 to 1, inclusive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false (a mutation) and openWorldHint=true. The description adds only 'returns details of the event' and omits meaningful behavioral context for a mutation tool of this complexity: guest notifications, the sendUpdates/conferenceDataVersion/supportsAttachments side-effect flags, permission requirements, and attendee-invitation behavior are all undisclosed.
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 tight sentence with the action front-loaded and no filler. It is efficient, though the trailing return-value clause could arguably be dropped since it is the only content beyond the verb.
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 brief note about returned details is helpful, but for a mutation tool with 7 parameters and rich side-effect potential (invitations, notifications, conference generation) the description is thin. It is minimally adequate rather than complete.
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 input schema fully documents all 7 parameters including sendUpdates, conferenceDataVersion, and maxAttendees. Per the rubric, that establishes a baseline of 3; the description adds nothing 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?
States a specific verb and resource ('Create a calendar event'), which clearly distinguishes it from the sibling gcalendar_events_list. It does not, however, differentiate itself from similar write operations or mention scope (which calendar), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context, prerequisites, or alternatives. An agent must infer that this is the creation counterpart to gcalendar_events_list without any explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gcalendar_events_listCRead-onlyIdempotent
List events matching a given search filter.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search terms to find events that match these terms in the following fields: summary, description, location, attendee's displayName, attendee's email, organizer's displayName, organizer's email, workingLocationProperties.officeLocation.buildingId, workingLocationProperties.officeLocation.deskId, workingLocationProperties.officeLocation.label, workingLocationProperties.customLocation.label. These search terms also match predefined keywords against all display title translations of working location, out-of-office, and focus-time events. Optional. | |
| iCalUID | No | Specifies an event ID in the iCalendar format to be provided in the response. Optional. Use this if you want to search for an event by its iCalendar ID. | |
| orderBy | No | The order of the events returned in the result. Optional. The default is an unspecified, stable order. Acceptable values are: "startTime" (order by the start date/time, ascending; this is only available when querying single events, i.e. the parameter singleEvents is True), "updated" (order by last modification time, ascending). | |
| timeMax | No | Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMin is set, timeMax must be greater than timeMin. | |
| timeMin | No | Lower bound (exclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax. | |
| timeZone | No | Time zone used in the response. Optional. The default is the time zone of the calendar. | |
| pageToken | No | Token specifying which result page to return. Optional. | |
| syncToken | No | Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All events deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False. There are several query parameters that cannot be specified together with nextSyncToken to ensure consistency of the client state. These are: iCalUID, orderBy, privateExtendedProperty, q, sharedExtendedProperty, timeMin, timeMax, updatedMin. All other query parameters should be the same as for the initial synchronization to avoid undefined behavior. If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken. Optional. The default is to return all entries. | |
| calendarId | Yes | Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. | |
| eventTypes | No | Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types. Acceptable values are: "birthday" (special all-day events with an annual recurrence), "default" (regular events), "focusTime" (focus time events), "fromGmail" (events from Gmail), "outOfOffice" (out of office events), "workingLocation" (working location events). | |
| maxResults | No | Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional. | |
| updatedMin | No | Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showDeleted. Optional. The default is not to filter by last modification time. | |
| showDeleted | No | Whether to include deleted events (with status equals "cancelled") in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if showDeleted and singleEvents are both False. If showDeleted and singleEvents are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False. | |
| maxAttendees | No | The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional. | |
| singleEvents | No | Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False. | |
| showHiddenInvitations | No | Whether to include hidden invitations in the result. Optional. The default is False. | |
| sharedExtendedProperty | No | Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints. | |
| privateExtendedProperty | No | Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — no pagination behavior, no sync-token semantics, no note that results are scoped to a single calendar. It contributes no behavioral context of its own.
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?
One short sentence with zero waste, and the action is front-loaded. But the brevity is under-specification rather than disciplined conciseness — it omits any usable context an agent would want for a 18-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool with 18 parameters, no output schema, and paging/sync behavior, a single sentence is insufficient. The rich schema mitigates some of this, but the description supplies no operational framing (single-calendar scope, pagination, recurring-event expansion) that an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 18 parameters, so the schema carries full semantic burden (time bounds, orderBy constraints, syncToken exclusions, etc.). The description adds no parameter meaning whatsoever, so the 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?
States a specific verb (List) and resource (events) plus a scope qualifier ('matching a given search filter'). However, 'search filter' is vague against an 18-parameter schema and the description offers no differentiation from the sibling gcalendar_events_insert or any hint of what the tool actually filters on.
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 versus alternatives, no mention of prerequisites (calendarId required, calendarList.list to discover IDs), and no exclusions. The single sentence gives only the bare action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdocs_documents_createA
Create a blank document with a title. Only the title is honoured — the document is created empty. To add content, call this and then documents_batch_update with the returned documentId.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | The document to create. Only the title is honoured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and openWorldHint=true, so the description carries the behavioral load and does well: it discloses the critical constraint that only the title is honoured and the document is created empty. It also notes the documentId is returned, which matters with no output schema. It stops short of noting auth/permission or quota behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, zero padding, and the most important constraint (empty document, title-only) is front-loaded before the follow-up instructions. Every sentence carries 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?
With no output schema, the description compensates by mentioning the returned documentId and the batch_update follow-up, which is what an agent needs to chain calls. For a single-param mutation tool with annotations covering the safety profile, this is nearly complete; only auth/error behavior is absent.
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% and the title field already states it is the only honoured field, so the description largely restates structured data. Baseline 3 applies; the emphasis on the empty-document effect is useful but not new information 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?
States a specific verb (create) and resource (document), and immediately disambiguates the scope: it produces a blank/empty document, not a content-bearing one. This is a distinct action an agent can tell apart from content-writing operations. The mention of documents_batch_update further fixes its place in the workflow.
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 clear sequencing guidance: to add content, create first and then call documents_batch_update with the returned documentId. It does not state explicit exclusions or alternatives (e.g., when to use a copy/template flow instead), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdocs_documents_getARead-onlyIdempotent
Read a document's full structural content. The document ID is the long string in its URL, between '/d/' and '/edit'. Pass include_tabs_content=true for a document with several tabs, since the default response covers only the first.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | The ID of the document to retrieve. This is the long string in the document's URL, between `/d/` and `/edit`. | |
| includeTabsContent | No | When true, content is returned in the `tabs` field, covering every tab in the document. When false or omitted, only the first tab's content is returned, in the legacy top-level `body` field. | |
| suggestionsViewMode | No | How to render suggested edits. Defaults to DEFAULT_FOR_CURRENT_ACCESS, which shows suggestions inline if the caller may see them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered structurally. The description adds a genuinely non-obvious behavioral default: the default response covers only the first tab, which would silently truncate output for multi-tab documents. It does not mention auth scopes, payload size, or rate limits, so it is not fully 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?
Three tight sentences, front-loaded with the purpose, then invocation details. It loses a point because the documentId URL-parsing sentence exactly duplicates the schema description and earns nothing new.
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 read-only get with no output schema, the description covers what the operation does and the one behavioral trap (single-tab default) that would cause an agent to return incomplete content. Nothing further is required to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, including the tabs/body return-shape distinction for includeTabsContent. The description's documentId explanation is a verbatim restatement of the schema and its tab note largely duplicates the schema text, 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?
States a specific verb ('Read') and resource ('a document's full structural content'), which is enough to separate it from gdrive_files_export, gsheets_spreadsheets_values_get and granola_notes_get. No ambiguity about what is fetched.
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 sentence about passing include_tabs_content=true for multi-tab documents is conditional guidance on invocation, which is useful. However, there is no guidance on when to choose this tool over sibling read tools (gdrive_files_export, gsheets values get), or any stated prerequisites beyond the ID format.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_download_job_logsARead-onlyIdempotent
Read a failing job's log. Returns the last 200 lines plus every line that looks like an error, with the line numbers and the log's real length — not the whole file, which is routinely megabytes. Use this after actions_list_jobs_for_run has named the job; try checks_list_annotations first, which is cheaper when the check reported the failure with a file and a line.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| jobId | Yes | The unique identifier of the job. This is the job's `id` from `actions_list_jobs_for_run`, not its name and not the run's id. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and open-world, and the description adds the material behavioral fact they do not cover: the response is truncated to the last 200 lines plus error-looking lines, with line numbers and the true log length. That prevents an agent from assuming it received the full file, which matters for a multi-megabyte log.
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 what the tool returns and why it is truncated, then the workflow guidance. Every clause carries information; nothing is padding.
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?
There is no output schema, and the description compensates by describing the return shape (line counts, error extraction, real length). Combined with the annotations and full schema coverage, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that jobId is the job's id from actions_list_jobs_for_run, not its name or the run id. The description reinforces that routing but adds no format or constraint detail beyond the schema, so the baseline of 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?
States a specific verb and resource ('Read a failing job's log') and immediately scopes what is returned, which separates it from generic run-level tools. It names two siblings it relates to (actions_list_jobs_for_run, checks_list_annotations), so an agent can place it precisely in the workflow.
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?
Explicit sequencing: use after actions_list_jobs_for_run has named the job, and try checks_list_annotations first because it is cheaper when the check reported a file and line. This is a real when-to-use / prefer-alternative rule, not an implied one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_get_run_usageARead-onlyIdempotent
Get a run's total run time and its billable milliseconds per runner operating system. Billable minutes apply only to private repositories on GitHub-hosted runners. GitHub has this endpoint closing down.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| runId | Yes | The ID of the workflow run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered. The description meaningfully adds that billable metrics are restricted to private repositories on GitHub-hosted runners, and flags the endpoint's impending shutdown, both of which an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the return payload and followed by the two constraints that matter. Every sentence carries distinct, non-redundant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly summarizes what is returned (total runtime and per-OS billable milliseconds) and adds applicability and deprecation caveats. Complete for a simple three-required-param read tool, though it never states typical use (cost analysis) or what happens once the endpoint closes.
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?
All three parameters (owner, repo, runId) are fully described in the schema at 100% coverage, so the baseline is 3. The description adds no format, casing, or ID-resolution detail 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?
States a specific verb and resource: fetching a run's total runtime plus billable milliseconds broken out per runner OS. It is far more precise than a generic 'get usage' description, though it does not explicitly contrast itself with siblings like github_actions_list_jobs_for_run that cover the same run.
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 supplies a scoping condition (billable minutes apply only to private repos on GitHub-hosted runners) and a deprecation warning, both of which inform decisions about the tool's output. However, it names no alternative tool and gives no explicit when-to-use/when-not-to-use guidance for choosing between this and the other Actions run tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_list_jobs_for_runARead-onlyIdempotent
List a run's jobs, each with its conclusion and its failing steps named. This is what turns 'the run failed' into 'the pytest step of the test job failed', usually without reading a log at all.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| runId | Yes | The ID of the workflow run. | |
| filter | No | Filters jobs by their `completed_at` timestamp. `latest` returns jobs from the most recent execution of the workflow run. `all` returns all jobs for a workflow run, including from old executions of the workflow run. GitHub uses `latest` when this is absent. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds real behavioral value by disclosing the shape of the result (per-job conclusion plus named failing steps) and that log retrieval is often unnecessary — information not present anywhere in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core capability front-loaded and zero filler; the second sentence earns its place by encoding the practical payoff of calling this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains what comes back (job conclusions, named failing steps). Pagination behavior and the filter default are left to the schema, which documents them adequately, so nothing critical is missing.
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%, including the non-obvious `filter` latest/all semantics, so the schema carries the full burden. The description adds nothing about owner/repo/runId/page/filter, so 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?
States a specific verb and resource ('List a run's jobs') and goes further by naming the return content (conclusion, failing steps). The closing clause implicitly differentiates it from github_actions_download_job_logs by noting you get the answer 'usually without reading a log at all'.
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?
Frames the trigger scenario precisely ('the run failed' → which job/step failed) and implies the log-download alternative is not needed. It stops short of explicitly naming github_actions_download_job_logs or stating when the log path is still required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_list_pending_deploymentsARead-onlyIdempotent
List the environments a run is waiting on for approval, and who can approve them. This is where a run sits when it is neither failing nor progressing.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| runId | Yes | The ID of the workflow run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds domain context about the blocked-run state, but says nothing about approval mechanics, pagination, or result shape. Moderate added value over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and returned content. The second sentence is arguably flavor rather than instruction, but it does add interpretive value for the blocked-state case, so it earns its place without bloat.
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 read-only three-parameter list operation with no output schema and full annotation coverage, the description conveys what is listed and in what state. Missing only minor operational detail such as pagination or typical follow-up actions.
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 owner/repo/runId are fully documented in the schema and the description adds no syntax, format, or sourcing detail (e.g. which endpoint yields runId). This is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List the environments a run is waiting on for approval') and even specifies the returned fields (who can approve them). It does not explicitly contrast with the sibling github_actions_review_pending_deployments, whose name is close enough to confuse an agent, so it falls short of the top tier.
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?
'This is where a run sits when it is neither failing nor progressing' implies the situation in which the tool is relevant, but there is no explicit when-to-use/when-not guidance and no alternative named (e.g. review_pending_deployments for acting on the same state). Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_list_runs_for_workflowARead-onlyIdempotent
List the runs of one workflow, most recent first — 'is this pipeline green', rather than 'is anything red'. The same single status filter as actions_list_workflow_runs, which matches a status or a conclusion.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| actor | No | Returns someone's workflow runs. Use the login for the user who created the `push` associated with the check suite or workflow run. | |
| event | No | Returns workflow run triggered by the event you specify. For example, `push`, `pull_request` or `issue`. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| branch | No | Returns workflow runs associated with a branch. Use the name of the branch of the `push`. | |
| status | No | Returns workflow runs with the check run `status` or `conclusion` that you specify. For example, a conclusion can be `success` or a status can be `in_progress`. Only GitHub Actions can set a status of `waiting`, `pending`, or `requested`. | |
| created | No | Returns workflow runs created within the given date-time range, in GitHub's search syntax: '>=2026-01-01' or '2026-01-01..2026-02-01'. | |
| headSha | No | Only returns workflow runs that are associated with the specified `head_sha`. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| workflowId | Yes | The ID of the workflow. You can also pass the workflow file name as a string, such as `ci.yml`, which is usually the one you have. | |
| checkSuiteId | No | Returns workflow runs with the `check_suite_id` that you specify. | |
| excludePullRequests | No | If `true` pull requests are omitted from the response (empty array). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds ordering ('most recent first') and notes the status filter matches either a status or a conclusion, which is useful behavior, but says nothing about pagination limits or result shape. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, zero waste, with the scope and ordering constraint front-loaded before the filter note. Nothing to trim.
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 13-parameter read tool with full schema coverage and annotations present and no output schema, the description supplies the scope, ordering, and the key filter nuance an agent needs. Only the return/pagination behavior is left unstated, which is a minor omission given the schema already documents perPage and page.
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 every one of the 13 parameters is already documented, including the status field's status/conclusion semantics. The description's restatement of the single status filter adds marginal clarification but no format or syntax detail beyond 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?
States a specific verb and resource ('List the runs of one workflow') plus ordering ('most recent first'), and explicitly names the sibling 'actions_list_workflow_runs' to contrast scope. An agent can tell this apart from the repo-wide listing without opening either schema.
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?
Frames the use case as 'is this pipeline green' rather than 'is anything red', which is a genuine when-to-use heuristic that routes the agent away from broader listing tools. It stops short of naming an explicit alternative tool or exclusion conditions, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_list_workflow_runsBRead-onlyIdempotent
List CI runs, most recent first. The single status filter matches either a run's status or its conclusion, so 'in_progress' and 'failure' are both valid there.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| actor | No | Only runs for pushes by this username. | |
| event | No | Only runs triggered by this event, such as 'push' or 'pull_request'. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| branch | No | Only runs for pushes to this branch. | |
| status | No | Match a run's status or its conclusion. 'in_progress' and 'queued' are statuses; 'success', 'failure' and 'cancelled' are conclusions. | |
| created | No | Only runs created in this window, in GitHub's search syntax: '>=2026-01-01' or '2026-01-01..2026-02-01'. | |
| headSha | No | Only runs for this commit SHA. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| excludePullRequests | No | Leave the pull requests off each run. They are the bulkiest part of the response and rarely the reason for listing runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds the sort order, which is genuinely new behavioral information, but its other substantive claim (the dual status/conclusion matching) restates what the schema already documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and the caveat second; nothing is wasted. The second sentence is slightly redundant with the schema's status description, which keeps it just short of a 5.
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 an 11-parameter list tool with no output schema and no title, the description covers ordering and the riskiest filter but says nothing about pagination behavior or the shape of the returned run objects. Annotations cover safety, but return-value framing is left entirely implicit.
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%, including the tricky status semantics and the excludePullRequests payload-size hint, so the schema carries the parameter burden. The description's status note duplicates the enum field's own description rather than adding syntax, defaults or interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List CI runs") plus an ordering guarantee ("most recent first"), so the agent knows exactly what it returns. It does not, however, distinguish itself from the close sibling github_actions_list_runs_for_workflow, which is the one thing an agent most needs to disambiguate here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives. Given a near-identical sibling (list_runs_for_workflow), the absence of a routing rule leaves the agent to infer the choice from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_actions_review_pending_deploymentsA
Approve or reject a run's pending deployments. Takes the environment ids from actions_list_pending_deployments. A comment is required by GitHub, not optional.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| runId | Yes | The ID of the workflow run. | |
| state | Yes | Whether to approve or reject deployment to the specified environments. | |
| comment | Yes | A comment to accompany the deployment review. | |
| environmentIds | Yes | The list of environment ids to approve or reject. These are the `environment.id` values from `actions_list_pending_deployments`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutating nature is known. The description adds one genuinely useful behavioral fact -- that GitHub mandates a comment even though it looks optional -- but omits permissions, irreversibility, and post-review effects, which is moderate value given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero padding, with the core action front-loaded and the prerequisite and constraint following in priority order.
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 6-required-param mutation tool with no output schema, the description covers the action, the id source, and a key constraint. It could mention permission requirements or the consequence of the review, but nothing essential to correct invocation is missing.
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 six parameters including the environmentIds source and the state enum. The description's note that the comment is required by GitHub adds slight emphasis but no new syntax or format detail 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?
States a specific verb pair (approve or reject) applied to a specific resource (a run's pending deployments), which cleanly distinguishes it from the sibling github_actions_list_pending_deployments that merely reads them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the prerequisite workflow by directing the agent to obtain environment ids from actions_list_pending_deployments first, giving clear sequencing context. It does not state explicit exclusions or when-not-to-use, keeping it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_checks_list_annotationsARead-onlyIdempotent
List a check run's annotations: each failure with the file, the line range, a level and a message, already extracted by whoever ran the check. The cheapest way to find out why a build is red — try this before downloading any log. GitHub returns at most 50 per page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| checkRunId | Yes | The unique identifier of the check run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower. The description still adds real context: it explains where the data comes from ('already extracted by whoever ran the check') and discloses the server-side cap ('at most 50 per page'). It does not restate anything from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the purpose and payload shape come first, then the cost-based routing advice. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in to describe the return shape (failures with file, line range, level, message) and the pagination limit. For a read-only listing tool this leaves no material gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so owner, repo, checkRunId, page, and perPage are fully documented in the schema. The description only references the check run implicitly and adds no format or syntax detail beyond the schema, so the 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?
States a specific verb ('List') and resource ('a check run's annotations') and enumerates what each annotation contains (file, line range, level, message). This differentiates it from siblings such as github_actions_download_job_logs, which the description explicitly positions against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('The cheapest way to find out why a build is red — try this before downloading any log'), naming the alternative and the condition that favors this tool. This is exactly the routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_code_scanning_list_alertsARead-onlyIdempotent
List code scanning alerts, each with the rule that fired and the file and line it fired on. Filter to one pull request with pr, or to a branch with ref. Needs GitHub Advanced Security on a private repository, which answers 403 without it.
| Name | Required | Description | Default |
|---|---|---|---|
| pr | No | The number of the pull request for the results you want to list. | |
| ref | No | The Git reference for the results you want to list. A branch can be `refs/heads/BRANCH` or simply `BRANCH`. To reference a pull request use `refs/pull/NUMBER/merge`. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| sort | No | The property by which to sort the results. GitHub uses `created` when this is absent. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| state | No | If specified, only code scanning alerts with this state will be returned. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| severity | No | If specified, only code scanning alerts with this severity will be returned. | |
| toolGuid | No | The GUID of a code scanning tool. Note that some code scanning tools may not include a GUID in their analysis data. Cannot be combined with `tool_name`. | |
| toolName | No | The name of a code scanning tool. Only results by this tool will be listed. You can specify the tool by using either `tool_name` or `tool_guid`, but not both. | |
| assignees | No | Filter alerts by assignees, as a comma-separated list of user handles. Use `*` for at least one assignee or `none` for unassigned. | |
| direction | No | The direction to sort the results by. GitHub uses `desc` when this is absent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, and open-world behavior, but the description adds useful context beyond them. It describes the alert contents (rule, file, line), names the filtering dimensions, and explicitly warns about the GitHub Advanced Security requirement and resulting 403 error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences front-load the core purpose, then add filtering guidance and the authentication prerequisite. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents the parameters and the annotations cover the safety profile, so the description is complete enough for correct invocation. It also helpfully describes the returned alert shape and auth prerequisite, though it does not mention 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?
Schema description coverage is 100%, so the schema already documents all 13 parameters. The description adds no syntax or format details beyond what the schema provides for `pr` and `ref`, making the baseline 3 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 states a specific verb and resource: listing code scanning alerts. It also names the returned content (rule, file, line) and distinguishes this tool from sibling alert-listing tools such as secret scanning and Dependabot alerts by naming 'code scanning alerts' 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?
The description gives clear filtering context: use `pr` to filter to a pull request or `ref` to filter to a branch. It also states a prerequisite (GitHub Advanced Security on private repositories) and the 403 consequence, though it does not explicitly contrast this tool with its sibling scanning-alert tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_dependabot_list_alertsARead-onlyIdempotent
List a repository's Dependabot alerts: which dependency, how severe, and the first version that fixes it. Several filters take a comma-separated list, so state='open,dismissed' is valid. Needs the security_events scope. This endpoint has no page parameter — raise per_page rather than paging.
| Name | Required | Description | Default |
|---|---|---|---|
| has | No | Only alerts with the given property. Currently only `patch` is supported, which restricts results to alerts that have a fix available. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| sort | No | The property by which to sort the results. `created` means when the alert was created. `updated` means when the alert's state last changed. `epss_percentage` sorts by estimated exploitation probability. GitHub uses `created` when this is absent. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| scope | No | The scope of the vulnerable dependency. `runtime` is what ships; `development` is what only the build sees. | |
| state | No | A comma-separated list of states. If specified, only alerts with these states will be returned. Can be: `auto_dismissed`, `dismissed`, `fixed`, `open`. | |
| package | No | A comma-separated list of package names to restrict the results to. | |
| perPage | No | The number of results to return (max 100). Defaults to 30. | |
| assignee | No | Filter alerts by assignees, as a comma-separated list of user handles. Use `*` for alerts with at least one assignee or `none` for alerts with no assignees. | |
| manifest | No | A comma-separated list of full manifest paths. | |
| severity | No | A comma-separated list of severities. Can be: `low`, `medium`, `high`, `critical`. | |
| direction | No | The direction to sort the results by. GitHub uses `desc` when this is absent. | |
| ecosystem | No | A comma-separated list of ecosystems. Can be: `composer`, `go`, `maven`, `npm`, `nuget`, `pip`, `pub`, `rubygems`, `rust`. | |
| relationship | No | A comma-separated list of relationships of the vulnerable dependency to your project. Can be: `unknown`, `direct`, `transitive`, `inconclusive`. | |
| classification | No | A comma-separated list of vulnerability classifications. Can be: `malware`, `general`. | |
| epssPercentage | No | Filter by EPSS percentage — the estimated probability of exploitation. An exact number, a comparator such as `>0.5`, or a range `0.1..0.4`, with values from 0.0 to 1.0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, yet the description adds a genuine auth requirement ('Needs the `security_events` scope') and a behavioral quirk (no page parameter, so raise per_page). It stops short of covering rate limits or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, purpose first, then invocation tips. No filler and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter filtered-list tool with a fully documented schema but no output schema, the description supplies the essentials an agent needs (scope, filter syntax, pagination convention). Sibling disambiguation is the only notable gap.
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% (baseline 3), and the description still adds a concrete comma-separated example (`state='open,dismissed'`) plus the pagination guidance for per_page/perPage. Minor naming mismatch (`per_page` vs schema's `perPage`) keeps it from the top.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List a repository's Dependabot alerts') and previews the payload ('which dependency, how severe, and the first version that fixes it'). It is unambiguous against the sibling alert tools (code_scanning_list_alerts, secret_scanning_list_alerts).
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 operational invocation context (comma-separated filters, no paging) but never says when to choose this over the sibling scanning-alert tools or any exclusions. Usage is implied from the Dependabot-specific purpose rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_git_refs_createA
Create a branch or tag pointing at an existing commit. The reference must be fully qualified, like 'refs/heads/my-branch'.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The fully qualified reference, such as 'refs/heads/my-branch'. A bare branch name is rejected. | |
| sha | Yes | The commit SHA the new reference points at. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this is an open-world write. The description adds the meaningful constraint that the target must be an existing commit and that the ref must be fully qualified, but it says nothing about what happens on conflict (existing ref) or required write permissions.
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 tight sentences, zero waste, with the core action front-loaded and the input constraint immediately following. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 4-parameter mutation with no output schema, the description covers the action, the target, and the key input constraint, and the annotations carry the safety profile. It could be more complete by noting conflict/error behavior, but the essentials are present.
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 four parameters are already documented, including the 'refs/heads/my-branch' format for `ref`. The description merely restates the fully-qualified requirement that the schema already carries. Baseline 3 applies since the schema does the heavy lifting.
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 gives a specific verb+resource ('Create a branch or tag pointing at an existing commit'), which is clear and distinct from the read-only sibling github_git_refs_get. It does not, however, explicitly name any sibling or contrast itself with adjacent tools like github_repos_create_or_update_file, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers you call this when you need a new branch or tag. There is no explicit when-to-use or when-not guidance, no mention of checking for pre-existing refs (github_git_refs_get), and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_git_refs_getARead-onlyIdempotent
Get a reference and the commit SHA it points at — how you read a branch's current head before building on it. ref is heads/main or tags/v1.0, without the refs/ prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The Git reference, formatted as `heads/BRANCH_NAME` for a branch or `tags/TAG_NAME` for a tag. Without the `refs/` prefix. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds beyond them by disclosing what is actually returned (the commit SHA the ref points at), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the core action and return value front-loaded before the format detail. Nothing is padding and every clause carries 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 read tool with a fully documented 3-parameter schema and annotations covering the safety profile, the description is nearly complete, and it compensates for the absent output schema by naming the returned SHA. Minor gap: it does not note error behavior for nonexistent refs.
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 the schema already documents ref, repo and owner identifiers. The description's format examples (heads/main, tags/v1.0, no refs/ prefix) duplicate what the schema says, so it adds no meaning beyond the structured field. 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?
States a specific verb and resource ('Get a reference and the commit SHA it points at') and even names the return value. It reads clearly against the sibling github_git_refs_create, since 'get' vs 'create' is unambiguous without opening either schema.
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 clause 'how you read a branch's current head before building on it' gives a concrete use context an agent can match to intent. It stops short of naming alternatives or exclusions, so it is clear context rather than a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_issues_create_commentA
Post a comment on an issue or pull request. Pull requests take their own number here — GitHub treats them as issues for commenting.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The comment to post. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| issueNumber | Yes | The number that identifies the issue. A pull request number works here too — GitHub treats pull requests as issues for commenting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply readOnlyHint=false and openWorldHint=true, so write/non-deterministic behavior is already declared. The description adds the non-obvious behavioral nuance that PR numbers are accepted in the same field as issue numbers, but says nothing about auth requirements, rate limits, or failure behavior. With annotations carrying the safety profile, 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, zero filler, with the core action front-loaded and the PR-number caveat immediately after. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter write tool with no output schema, the definition covers the action, the resource, and the one genuinely surprising detail (PR numbers reuse the issue number field). Annotations cover the write/open-world profile, so the remaining omission (auth/error behavior) is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all four parameters are documented, so the baseline is 3. The description's note about pull request numbers largely restates what the schema already says under issueNumber, adding little parameter meaning beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (post a comment) and resource (issue or pull request), and immediately resolves the ambiguity that a pull request number is used in the same field. An agent can distinguish this from sibling write tools like slack_chat_post_message or gdocs_documents_create without opening any schema.
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 clarifies that both issues and pull requests are valid targets, which is genuinely useful routing information. However, it never states when to use this versus alternatives (e.g., PR review comments) or any precondition such as repo access, leaving usage implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_issues_list_for_repoARead-onlyIdempotent
List issues in a repository. Note that GitHub counts pull requests as issues, so results include both; the ones that are pull requests are marked is_pull_request. Filter with state, labels, assignee or creator.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| sort | No | What to sort results by. Defaults to `created`. | created |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| since | No | Only show results that were last updated after the given time. This is a timestamp in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. | |
| state | No | Indicates the state of the issues to return. Defaults to `open`. | open |
| labels | No | A list of comma separated label names. Example: `bug,ui,@high`. | |
| creator | No | The user that created the issue. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| assignee | No | Can be the name of a user. Pass in `none` for issues with no assigned user, and `*` for issues assigned to any user. | |
| direction | No | The direction to sort the results by. Defaults to `desc`. | desc |
| mentioned | No | A user that's mentioned in the issue. | |
| milestone | No | If an integer is passed, it should refer to a milestone by its number field. If the string `*` is passed, issues with any milestone are accepted. If the string `none` is passed, issues without milestones are returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds genuinely valuable non-obvious context: GitHub conflates PRs with issues and marks them via is_pull_request. It omits pagination/rate-limit behavior, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and immediately followed by the most important caveat and the filter list. Zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-param read-only list tool with full schema coverage and complete annotations, the description supplies the one critical gotcha (PRs counted as issues) and points at filters. No output schema exists, so return-shape explanation is not required. Minor gap is the lack of sibling routing.
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 13 parameters. The description only restates a subset (state, labels, assignee, creator) and adds no syntax or semantics beyond the schema, so 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?
States a specific verb and resource ('List issues in a repository') that an agent can act on immediately. It does not, however, differentiate itself from the obvious sibling github_search_issues, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (list issues in a repo) and the description names the available filters, but it never says when to prefer this over github_search_issues or linear_issues_list, nor any exclusions. Adequate but with a clear routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_notifications_listARead-onlyIdempotent
List your unread notifications — mentions, review requests, assignments — most recently updated first. This is how an agent finds out it is needed without polling repositories. reason says why each one is here; url is the thing it concerns. Note per_page maxes at 50 here, not 100.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | If `true`, show notifications marked as read. Absent, only unread ones come back. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| since | No | Only show results that were last updated after the given time, in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. | |
| before | No | Only show notifications updated before the given time, in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. | |
| perPage | No | The number of results per page. This endpoint's maximum is 50, not the 100 the rest of the REST API allows. Defaults to 50. | |
| participating | No | If `true`, only shows notifications in which the user is directly participating or mentioned — the ones that are about you rather than about a repository you watch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so the safety profile is covered. The description adds real behavioral value: explicit sort order, the field semantics of `reason` and `url`, and the endpoint-specific `per_page` cap, none of which appear in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary action and scope. The reason/url and per_page notes are useful but the per_page point duplicates the schema, costing a bit of efficiency.
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?
There is no output schema, so the description usefully volunteers the meaning of key return fields (`reason`, `url`) and the ordering. It stops short of describing pagination behavior or the array shape, leaving minor gaps for a listing 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 description coverage is 100%, so every parameter including the 50-cap on perPage is already documented in the schema. The description's per_page note merely echoes the schema text and adds no new parameter meaning, so the 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?
States a specific verb+resource ("List your unread notifications") and enumerates the kinds returned (mentions, review requests, assignments), plus the sort order. No sibling tool competes for this role, so the agent can identify it immediately.
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 a clear motivating scenario — "how an agent finds out it is needed without polling repositories" — which tells the agent when this beats checking repos directly. It does not name specific alternative tools or exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_pulls_createA
Open a pull request from head into base. Provide title for a new pull request, or issue to convert an existing issue into one — exactly one of the two. Both branches must already exist.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The pull request to open. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutation profile is known. The description adds genuinely non-obvious behavioral constraints beyond that: the mutual exclusivity of `title`/`issue` and the requirement that both branches pre-exist, both of which would otherwise surface only as API errors. Auth/permission requirements and side effects (notifications, draft semantics) remain undisclosed.
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, zero filler, and the operation plus its direction are front-loaded before the parameter-selection rule. Every clause carries actionable 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?
No output schema exists, but the return value of a PR-creation call is largely self-evident and not required here. The description covers the two real failure modes (mode selection, missing branches); it omits cross-repository/headRepo usage and draft behavior, though the schema documents those inline.
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 baseline is 3. The description goes beyond the schema by asserting a cross-parameter constraint ('exactly one of the two') that the schema only expresses one-directionally as 'Required unless X', which is a useful addition for callers choosing between modes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open a pull request') and pins down the direction with 'from `head` into `base`'. That immediately separates it from read-only siblings like github_pulls_get and github_pulls_list, and from github_pulls_update, without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real routing rule between two modes: supply `title` for a new PR, or `issue` to convert an existing issue, 'exactly one of the two'. It also states the precondition that both branches must already exist. It does not, however, point to any alternative tool (e.g. github_pulls_update for later edits) or state 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.
github_pulls_getARead-onlyIdempotent
Get a single pull request, including its mergeability and the counts of changed files, additions and deletions. These details are only present on this endpoint, not on pulls_list.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| pullNumber | Yes | The number that identifies the pull request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered. Because no output schema exists, the description's disclosure of what the response contains (mergeability, file/add/delete counts) is genuinely additive rather than redundant. It says nothing about auth scope or rate limits, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the differentiating return data is front-loaded before the sibling comparison. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially compensates by naming the unique return fields, which is the main thing an agent needs to choose this endpoint. It does not describe error behavior (e.g. 404 for a nonexistent PR number), so it is not fully complete.
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 owner, repo and pullNumber are already fully documented in the schema. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (a single pull request) and goes further by naming the distinguishing payload: mergeability plus changed-file, addition and deletion counts. It also explicitly contrasts with `pulls_list`, so an agent can separate the two without opening either schema.
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 line 'These details are only present on this endpoint, not on `pulls_list`' effectively tells the agent when to prefer this tool over the list variant. It stops short of addressing other near-neighbors such as `github_pulls_get_diff` or `github_pulls_list_files`, and gives no prerequisites, so it is clear context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_pulls_get_diffARead-onlyIdempotent
Get a pull request's whole change as a unified diff, in one call. The same endpoint as pulls_get asked for a different representation. Use it to read a change end to end; use pulls_list_files when the change is large enough to need paging, since this has no way to ask for less.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| pullNumber | Yes | The number that identifies the pull request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent, so safety is covered. The description adds meaningful behavioral context beyond annotations: the entire diff comes in one call, there is no pagination or size-limiting control, and it is the same endpoint as `pulls_get` with a different representation. It does not discuss rate limits or authentication, but for a read-only diff tool that is a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the primary purpose and then the key alternative. Every sentence earns its place by adding either scope, comparison, or limitation.
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 exists, but the description states the return format (unified diff) and discloses the critical no-paging limitation. Combined with the fully covered input schema and safety annotations, an agent has everything needed to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three required parameters are documented in the schema. The description adds no parameter-level syntax or meaning beyond what the schema already provides, so the 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?
States a specific verb ('Get') and resource ('a pull request's whole change as a unified diff'), and explicitly distinguishes itself from siblings `pulls_get` (same endpoint, different representation) and `pulls_list_files` (for large changes needing paging). An agent can tell exactly what this tool returns versus its alternatives.
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?
Explicitly states when to use it ('read a change end to end') and when to use the alternative (`pulls_list_files` when the change is large enough to need paging), including the reason ('this has no way to ask for less'). No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_pulls_listARead-onlyIdempotent
List pull requests. Filter by state, by base branch, or by head in the form 'user:branch'.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Filter pulls by base branch name. Example: `gh-pages`. | |
| head | No | Filter pulls by head user or head organization and branch name in the format of `user:ref-name` or `organization:ref-name`. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| sort | No | What to sort results by. Defaults to `created`. | created |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| state | No | Either `open`, `closed`, or `all` to filter by state. Defaults to `open`. | open |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| direction | No | The direction of the sort. Default: `desc` when sort is `created` or not specified, otherwise `asc`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds only the filter hint and the 'user:branch' head form, without disclosing pagination behavior or result ordering beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and then the filtering options. No filler or redundant phrasing.
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 read-only list tool with full schema coverage, no output schema and complete annotations, the description is nearly sufficient. It omits mention of pagination and sort, but those are covered by the schema, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all nine parameters are already documented, including state, base, head, sort and pagination. The description essentially restates the filter semantics already in the schema, so 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?
States a specific verb ('List') and resource ('pull requests'), so the action is unambiguous. However, it doesn't differentiate from siblings like github_releases_generate_notes or explain its scope relative to any other PR tooling, since no close PR-list sibling exists.
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 mention of filters ('state', 'base', 'head') implies when the tool is useful, but there is no explicit when-to-use vs when-not guidance or named alternatives. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_pulls_list_filesARead-onlyIdempotent
List the files a pull request changes, with per-file additions, deletions and patch text. A large pull request returns a lot of diff: keep per_page small and page through it.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| pullNumber | Yes | The number that identifies the pull request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds genuine context beyond that: the response carries full patch text for every changed file and large PRs return a heavy payload, which is a useful expectation-setting trait not present in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first defines output, the second defines the paging tactic. Front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully summarizes the return shape (per-file additions, deletions, patch text) and warns about payload size, so an agent knows what comes back. The one real gap is that it never positions itself against github_pulls_get_diff, leaving selection ambiguous among siblings.
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 five parameters are already documented (including page and per_page defaults and the max-100 bound). The description endorses small per_page values, which is mild usage color but adds no format or syntax information beyond 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?
States a specific verb+resource: 'List the files a pull request changes' and enumerates the per-file payload (additions, deletions, patch text). It is clear on its own, but does not distinguish itself from the close sibling github_pulls_get_diff, which an agent could easily confuse with it.
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 only guidance is operational ('keep per_page small and page through it'); there is no statement of when to use this tool versus github_pulls_get_diff, github_pulls_get or github_pulls_list. The agent gets a paging hint but no selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_pulls_list_requested_reviewersARead-onlyIdempotent
List who has been asked to review and has not answered yet. A reviewer drops off this list once they submit, so an empty list means nobody is outstanding — not that nobody was asked.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| pullNumber | Yes | The number that identifies the pull request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the readOnlyHint, idempotentHint, and openWorldHint annotations: reviewers drop off after submitting, and an empty list means no one is outstanding rather than no one was asked. It does not cover auth, rate limits, or pagination, but the key semantic behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the core purpose and followed by an essential interpretation caveat. No wasted wording.
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 read-only list tool with rich annotations and fully documented parameters, the description is nearly complete. It explains result semantics but does not mention pagination or response shape, which are minor gaps given the low 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 owner, repo, and pullNumber are already fully documented. The description adds no additional parameter meaning, making the baseline 3 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?
States a specific verb and resource: list requested reviewers who have not responded. The scope is clear, but it does not explicitly name sibling tools or alternatives, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by describing the outstanding-reviewer list and the meaning of an empty result. It does not state when to use this tool versus alternatives like github_pulls_get or github_pulls_list, so guidance remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_pulls_updateA
Update a pull request's title, body, state or base branch. Closing one is state: closed; there is no REST way to change its draft status.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | The branch to merge into. It must already exist on this repository; a pull request cannot be repointed at another repository. | |
| body | No | The new description. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| state | No | Whether the pull request is open or closed. | |
| title | No | The new title. | |
| pullNumber | Yes | The number that identifies the pull request. | |
| maintainerCanModify | No | Whether maintainers can commit to the head branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, open-world mutation, so the bar is lower; the description adds real value by disclosing the closing mechanism and the draft-status limitation, both of which are behavioral facts not in the schema. It omits whether omitted/null fields leave values unchanged and what auth scope is required, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the core action front-loaded and the two caveats (closing, draft status) following immediately. Every sentence carries information and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers the main behavioral gotchas and lets the fully-documented schema carry parameter detail. The one meaningful gap is whether omitting or nulling a field is a no-op, which an agent editing a PR would want to know.
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 baseline is 3, but the description adds semantic meaning beyond the schema: `state: closed` is the documented path to closing, and the draft-status note clarifies a limit on what parameters can accomplish. The partial-update semantics for null fields remain unexplained, keeping it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource and enumerates the mutable fields (title, body, state, base branch), so an agent immediately knows the scope of the operation. Sibling differentiation is implicit via the verb rather than explicit naming of github_pulls_get/list/create, which keeps this just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage guidance for the non-obvious case — closing is done with `state: closed` — and warns that draft status cannot be flipped via REST, which steers the agent away from a wrong call. It does not state prerequisites (e.g. write permission) or when to prefer this over other PR tools, so it stops short of explicit when/when-not alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_releases_get_latestARead-onlyIdempotent
Get the latest published release — GitHub's definition, meaning the most recent release that is neither a draft nor a prerelease. Not simply the newest one.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds valuable behavioral context by explaining the filtering logic: the result is the most recent release that is neither a draft nor a prerelease. It does not mention authentication requirements or rate limits, but those are outside the typical scope for a read-only GET.
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-loaded with the core action and followed by an important clarification. Every sentence earns its place, with no redundant or wasteful phrasing.
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 read-only tool with no output schema and annotations that cover the safety profile, the description is nearly complete. It clarifies the return semantics (latest published release, excluding drafts and prereleases) but does not describe the structure of the returned release object, though that may be acceptable for a standard API endpoint.
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%, and both parameters (owner and repo) are fully documented in the schema. The description does not add any parameter-level semantics beyond what the schema already provides, so the 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 states a specific verb and resource: 'Get the latest published release.' It then explicitly defines GitHub's meaning of 'latest published' as excluding drafts and prereleases, which distinguishes it from a naive 'newest release' interpretation. No direct sibling tool offers this exact function, so the clarity is sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by clarifying the definition of 'latest published' and warning that it is 'not simply the newest one.' However, it does not specify when to use this tool versus other release-related operations or outline any prerequisites or exclusions beyond the semantic definition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_releases_updateA
Update a release; anything omitted is left unchanged. Publishing a draft is this call with draft: false.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Text describing the contents of the tag. | |
| name | No | The name of the release. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| draft | No | `true` to make this a draft (unpublished) release, `false` to publish it. Setting it to `false` is how a draft is published. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| tagName | No | The name of the tag. | |
| releaseId | Yes | The unique identifier of the release. | |
| makeLatest | No | Whether this release should be set as the latest release for the repository — a string, not a boolean. Drafts and prereleases cannot be set as latest. | |
| prerelease | No | `true` to identify the release as a prerelease. | |
| targetCommitish | No | Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. | |
| discussionCategoryName | No | If specified, a discussion of the specified category is created and linked to the release. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a write operation (readOnlyHint false) and external scope (openWorldHint true). The description adds crucial behavioral semantics beyond annotations: partial update behavior ('anything omitted is left unchanged') and the exact mechanism for publishing a draft, which an agent needs to avoid unintended changes.
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 tightly written sentences with no filler. The partial-update constraint is front-loaded, and the draft-publishing note follows naturally. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with full schema descriptions and no output schema, the description covers the essential behavioral facts: it is a partial update and how to publish a draft. It omits explicit mention of permissions or rate limits, but those are not critical for correct invocation given the schema and annotations.
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 baseline is 3. The description adds meaning beyond the schema by clarifying that omitted parameters leave existing values unchanged and by explicitly tying the draft parameter to the publish action. This parameter-level insight is valuable and not fully redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('release') with scope ('anything omitted is left unchanged'). Clearly distinguishes from sibling read-only tools like github_releases_get_latest without requiring schema inspection.
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 a concrete usage scenario: 'Publishing a draft is this call with draft: false.' Gives clear context for one important case, though it does not explicitly state when not to use this tool or name alternatives beyond the partial-update note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_compare_commitsARead-onlyIdempotent
Compare two refs and get what is in one and not the other: the status, how far ahead or behind, the commits and the changed files. basehead is one string, 'main...my-feature', with three dots. Across forks, prefix each side with its owner.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| basehead | Yes | The base and head to compare, as `BASE...HEAD` — for example `main...my-feature`. Across repositories in the same network, prefix each side with its owner: `octocat:main...contributor:fix`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld), so the description earns credit for disclosing the response payload — status, ahead/behind, commit list, file changes. It omits any mention of pagination limits despite page/perPage existing, a minor gap.
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, zero filler, front-loaded with the purpose and return content before the basehead syntax note. Every clause carries information an agent needs.
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 shoulders the return-value burden and does so by naming the comparison fields. What's missing is pagination behavior for a tool that clearly paginates (page/perPage present), but otherwise it is sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents owner, repo, basehead, page and perPage. The description re-emphasizes the three-dot basehead format and cross-fork owner prefixing, which is helpful but largely duplicates the schema text; 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?
States a specific verb and resource ('Compare two refs') and enumerates the output: status, ahead/behind counts, commits, and changed files. This is clearly distinguishable from siblings like github_repos_list_commits (single branch history) or github_pulls_list_files (one PR's files).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'get what is in one and not the other' implicitly conveys the use case, and fork-prefix guidance is given. However, it never states when to prefer this over alternatives such as github_repos_list_commits or github_pulls_get_diff, and gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_create_or_update_fileA
Create a file or replace an existing one, in a single commit. Write the content as plain text. To replace a file, read it first and pass its sha; without one GitHub treats this as a create and refuses if the path exists.
| Name | Required | Description | Default |
|---|---|---|---|
| sha | No | The blob SHA of the file being replaced. Required when updating an existing file, omitted when creating a new one. | |
| path | Yes | Path to the file, relative to the repository root. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| author | No | Who wrote the change, if not the committer. | |
| branch | No | The branch to commit to. Absent, the default branch. | |
| content | Yes | Plain text content | |
| message | Yes | The commit message. | |
| committer | No | Who made the commit. Absent, the authenticated user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare that this writes and is open-world; the description adds real behavioral detail beyond that — the single-commit semantics, plain-text content requirement, and the specific failure mode when an existing path is targeted without a sha. Auth/permission requirements and rate limits remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, followed by the content format and the critical create-vs-update rule. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no output schema, the description covers the create/update distinction, content format, and the main error condition. Branch, author, and committer behavior are left to the schema, which documents them adequately, so nothing essential is missing.
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 baseline is 3, but the description adds workflow meaning the schema does not: that the caller should read the file first to obtain the `sha`, and that `content` must be plain text. The sha semantics are corroborated but the 'read first' procedure is genuinely additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a file or replace an existing one') with the scope modifier 'in a single commit'. An agent can immediately distinguish this from read tools like github_repos_get_content or commit-list tools among the 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?
Gives an explicit conditional: to replace a file, read it first and pass its `sha`; without one GitHub treats it as a create and refuses if the path exists. This is clear when/when-not guidance, though it does not name alternative sibling tools for the same task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_getARead-onlyIdempotent
Get a repository's metadata, including its default branch and topics.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered. The description adds the useful detail of which metadata it surfaces (default branch, topics), but says nothing about auth requirements, error behavior, or the shape of the response.
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 tight sentence, front-loaded with the verb and resource, with no filler or restated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with full annotation coverage and no output schema, the description gives enough to call it correctly and previews part of the return. Slightly more on what 'metadata' encompasses would make it fully complete.
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% – both owner and repo are fully documented in the schema, including case-sensitivity and the .git note. The description adds no parameter meaning beyond that, so the baseline of 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?
States a specific verb ('Get') and resource ('a repository's metadata'), and even names two concrete fields returned (default branch, topics). It doesn't explicitly distinguish itself from lookalike siblings such as github_repos_get_readme or github_repos_get_content, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, and no alternative named. For a simple metadata fetch the usage is strongly implied by the name, which fits the 'implied usage' tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_get_contentARead-onlyIdempotent
Read a file, or list a directory. Pass an empty path for the repository root. File contents come back decoded as text.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | The name of the commit/branch/tag. Defaults to the repository's default branch. | |
| path | Yes | The path of the file or directory, relative to the repository root. Use an empty string for the root directory. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely new context by disclosing the return format ('contents come back decoded as text'), which is valuable since there is no output schema, though it omits truncation behavior for large files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and scoping hint, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema, the description covers the essential behavior and the text-decoding return format. It could do more by describing what a directory listing returns or noting truncation limits on large files, but nothing critical is missing.
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 four parameters, including the empty-string root convention that the description restates. Baseline 3 is appropriate because the description adds no parameter detail beyond the structured 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?
States a specific dual verb (read a file / list a directory) plus the resource and its location, so the agent can distinguish it from siblings like github_repos_get_readme and github_repos_get without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a usage hint for the empty-path case, which implies root-directory listing, but it never says when to prefer this over github_repos_get_readme, github_search_code, or github_pulls_list_files. Usage is implied rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_get_readmeARead-onlyIdempotent
Get the repository's README, decoded to text. GitHub picks the preferred file itself across the spellings a repository might use, which saves guessing at repos_get_content.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | The name of the commit/branch/tag. Absent, the repository's default branch. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower, yet the description still adds real behavior: the content is returned already decoded to text, and GitHub auto-selects the preferred README among spelling variants. That is non-obvious behavior an agent would otherwise have to discover. It omits failure behavior when no README exists, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core capability front-loaded and the sibling comparison following. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema, the description covers what is returned (decoded README text) and how the file is chosen, which is the key ambiguity. It does not note the error case when a repository has no README, a minor but real gap.
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 all three parameters (owner, repo, ref) are documented in the schema itself, including the default-branch fallback for ref. The description adds no parameter-level detail, so the 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?
States a specific verb and resource ('Get the repository's README') and immediately disambiguates from the closest sibling by naming `repos_get_content`. An agent can distinguish it from the generic content tool without opening either schema.
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?
Explicitly frames the tool as the way to avoid 'guessing at `repos_get_content`', which routes the agent to the right tool for README retrieval. It stops short of stating when NOT to use it (e.g., when you need a non-README file or raw bytes), so it is clear context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_list_commitsARead-onlyIdempotent
List commits, newest first. Narrow with sha for a branch, path for one file's history, or since/until for a window.
| Name | Required | Description | Default |
|---|---|---|---|
| sha | No | SHA or branch to start listing commits from. Defaults to the repository's default branch. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| path | No | Only commits containing this file path will be returned. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| since | No | Only commits after this date will be returned, in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. | |
| until | No | Only commits before this date will be returned, in ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`. | |
| author | No | GitHub username or email address to filter commits by author. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is fully covered structurally. The description adds the 'newest first' ordering trait, but says nothing about pagination behavior, result caps, or rate limits that the annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the ordering behavior is front-loaded and the filtering options follow compactly. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter read tool with full schema coverage, no output schema, and annotations covering safety, the description supplies the key behavioral trait (ordering) and a map of the main filters. Pagination via page/perPage is only in the schema, a minor omission rather than a blocking one.
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 nine parameters are already documented in the schema (including defaults for page/perPage and ISO 8601 format for since/until). The description only restates sha/path/since/until usage without adding format or edge-case detail, so 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?
States a specific verb+resource ('List commits') plus an ordering guarantee ('newest first'), which is more than the name alone conveys. There is no sibling commit-listing tool to differentiate against, so the lack of explicit contrast is not a gap here.
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?
Explicitly tells the agent how to narrow results: `sha` for a branch, `path` for one file's history, `since`/`until` for a time window. This is clear usage guidance, though it never states when-not to use the tool or names an alternative tool for other commit-listing needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_list_contributorsARead-onlyIdempotent
List contributors, most commits first — who to ask about a repository. GitHub links only the first 500 author email addresses to accounts; the rest come back anonymous. An empty repository returns an empty object.
| Name | Required | Description | Default |
|---|---|---|---|
| anon | No | Set to `1` or `true` to include anonymous contributors in results. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, but the description adds real behavioral context beyond them: contributors are ordered by commit count, only the first 500 author emails link to accounts with the rest returned anonymous, and an empty repo returns an empty object. This meaningfully enriches the safety-only annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose, the 500-email linking caveat, and the empty-repo edge case. Front-loaded with the core 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?
With no output schema, the description carries return-value burden and does address key cases (ordering, anonymous contributors, empty repo). It does not cover pagination semantics or the shape of contributor objects, leaving minor gaps for a five-parameter 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 all five parameters (anon, page, perPage, repo, owner) are already documented in the schema. The description only alludes to the anonymous-contributor behavior indirectly and adds no syntax or format detail beyond what the schema provides, so the 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?
States a specific verb (List), resource (contributors), scope (a repository), and ordering (most commits first), plus a human framing ('who to ask about a repository'). The resource is specific enough to be unmistakable against siblings like github_repos_list_commits or github_repos_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'who to ask about a repository' implies the use case, but no explicit when-to-use, prerequisites, or named alternatives are given. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_repos_list_languagesARead-onlyIdempotent
List a repository's languages with bytes of code each — the quickest way to find out what a repository is written in before reading any of it. Answers with an object keyed by language, so there is nothing to page.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint, idempotentHint and openWorldHint already covering the safety profile, the description still earns credit by disclosing the return shape (an object keyed by language) and the absence of pagination, which matters since no output schema exists. It does not mention auth requirements or rate limits, so it is not fully 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?
A single tightly written sentence that front-loads the action and resource, then appends the two facts an agent needs (bytes per language, no paging). Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with a fully documented schema and no output schema, the description supplies everything missing: what it returns, its keying, and that there is no pagination to handle. Nothing an agent needs to call it correctly is absent.
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% and both required parameters (owner, repo) are documented in the schema, so the baseline is 3. The description adds no formatting or case-sensitivity guidance 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?
States a specific verb (List) and resource (a repository's languages) and adds the payload detail (bytes of code each). An agent immediately knows this is the language-breakdown read, distinct from the GitHub search tools among the 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?
Provides clear context for use — 'the quickest way to find out what a repository is written in before reading any of it' — which tells the agent when this tool is the right first step. It does not, however, name an alternative tool or state exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_search_codeARead-onlyIdempotent
Search code across GitHub. Only default branches are indexed and only files under 384 KB. The query needs a real search term, not just qualifiers. This endpoint allows ten requests per minute and returns at most 1,000 results.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | The search query. Combine a term with qualifiers: 'retry in:file language:python repo:owner/name'. Useful qualifiers are in:file, in:path, language:, repo:, org:, user:, path:, filename:, extension:, size:. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: indexing is limited to default branches and files under 384 KB, the rate limit is ten requests per minute, and results are capped at 1,000. These are exactly the operational constraints an agent needs and are not available in the schema or hints.
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?
Four short sentences, front-loaded with purpose and followed by constraints, with no filler. Every sentence carries a distinct, useful fact.
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 search tool with no output schema, the description covers scope, indexing limits, query requirements, rate limit, and result cap. Nothing material an agent needs before invoking it is missing.
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 baseline is 3. The description goes further by constraining the 'q' parameter ('needs a real search term, not just qualifiers'), adding a usage rule the schema's qualifier list does not state on its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search code across GitHub'), which cleanly separates it from github_search_repositories and github_search_issues by the indexed resource. It does not explicitly name those siblings, so the differentiation rests on the resource noun rather than an explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable context: 'The query needs a real search term, not just qualifiers' tells the agent how to construct a valid call, and the indexing limits bound expectations. It never names an alternative tool or a when-not-to-use condition, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_search_issuesARead-onlyIdempotent
Search issues and pull requests across GitHub with qualifiers, e.g. 'repo:owner/name is:issue is:open label:bug'. Use this when the repository is unknown or the filter is richer than issues_list_for_repo supports. Rate limited to 30 requests per minute.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | The query containing one or more search keywords and qualifiers, e.g. `repo:octocat/hello-world is:issue is:open label:bug`. Qualifiers narrow the search: `repo:`, `org:`, `author:`, `assignee:`, `is:open`, `is:closed`, `is:pr`, `is:issue`, `label:`, `created:>2024-01-01`. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| sort | No | Sorts the results by the given field. Default: results are sorted by best match. | |
| order | No | Determines whether the first search result returned is the highest number of matches (`desc`) or lowest (`asc`). Ignored unless `sort` is provided. GitHub uses `desc` when this is absent. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| searchType | No | Which search algorithm to apply. `semantic` matches on meaning rather than keywords, `hybrid` combines both. Omit for a lexical search, which is the default. | |
| advancedSearch | No | Set to true to use advanced search, which adds `AND`/`OR` keywords and nested parenthesised queries to the qualifier syntax. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered structurally. The description adds the non-obvious operational constraint of 30 requests per minute, which materially affects how an agent should batch or repeat calls and is not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: purpose first, routing second, constraint last. Every sentence carries distinct information and the most decision-relevant content is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, open-world search tool with full schema coverage and annotations carrying the safety profile, the description covers what it must. The only gap is that no output schema exists and the description says nothing about result shape or total-count/pagination behavior, which is a minor omission but a real one.
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%: every parameter, including the query qualifier list, sort, order, perPage, searchType and advancedSearch, is documented inline. The description's sample query and qualifier mention duplicate the schema rather than adding new meaning, so the 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?
States a specific verb and resource ('Search issues and pull requests across GitHub') plus the scope qualifier (across GitHub, not a single repo). It explicitly distinguishes itself from the sibling github_issues_list_for_repo, so an agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: use this when the repository is unknown OR the filter is richer than github_issues_list_for_repo supports. That is a concrete when-to-use condition naming the specific alternative, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_search_repositoriesARead-onlyIdempotent
Search repositories with qualifiers, e.g. 'topic:cli language:go stars:>500'. Rate limited to 30 requests per minute.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | The query containing one or more search keywords and qualifiers, e.g. `tetris language:assembly stars:>100`. Qualifiers include `language:`, `stars:`, `forks:`, `topic:`, `org:`, `user:`, `license:`. | |
| page | No | The page number of the results to fetch. Defaults to 1. | |
| sort | No | Sorts the results by number of stars, forks, help-wanted issues, or how recently the items were updated. Default: best match. | |
| order | No | Determines whether the first search result returned is the highest number of matches (`desc`) or lowest (`asc`). Ignored unless `sort` is provided. GitHub uses `desc` when this is absent. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and idempotent behavior. The description adds a valuable operational constraint: a rate limit of 30 requests per minute, which is not available from annotations or 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 with no waste. The purpose and example are front-loaded, followed by the rate limit. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and annotations are rich, and the description adds a key rate-limit detail. It is nearly complete for a search tool, though it could note that results are paginated or what the response contains if an agent needed that reassurance.
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 five parameters and qualifier syntax. The description's example query is consistent with the schema but does not add meaning beyond it, making the baseline 3 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 states a specific verb and resource: search repositories. The example query with qualifiers makes the scope unambiguous and distinguishes it from sibling tools like github_search_commits or github_repos_list_languages.
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?
Usage is implied by the tool name and description, but there is no explicit when-to-use or when-not-to-use guidance, nor any comparison to alternatives such as github_repos_list_languages or tavily_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_secret_scanning_list_alertsARead-onlyIdempotent
List secret scanning alerts: which pattern matched, which provider, and whether the credential is still valid. The detected secret itself is never returned by this tool — it is dropped from the response whatever the request asked for, because triage does not need it. Requires administrator access.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page number of the results to fetch. Defaults to 1. | |
| repo | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. | |
| sort | No | The property to sort the results by. `created` means when the alert was created; `updated` means when it was updated or resolved. GitHub uses `created` when this is absent. | |
| owner | Yes | The account owner of the repository. The name is not case sensitive. | |
| state | No | Set to `open` or `resolved` to only list alerts in a specific state. | |
| perPage | No | The number of results per page (max 100). Defaults to 30. | |
| assignee | No | Filters alerts by assignee. Use `*` for all assigned alerts, `none` for unassigned, or a GitHub username. | |
| validity | No | A comma-separated list of validities — whether GitHub could confirm the secret still works. Can be: `active`, `inactive`, `unknown`. | |
| direction | No | The direction to sort the results by. GitHub uses `desc` when this is absent. | |
| hideSecret | No | Leave the detected secret value out of the response. Set this when the result is going into a model's context: triage needs the type, the location and the state, not the credential. | |
| resolution | No | A comma-separated list of resolutions. Valid resolutions are `false_positive`, `wont_fix`, `revoked`, `pattern_edited`, `pattern_deleted` or `used_in_tests`. | |
| secretType | No | A comma-separated list of secret types to return. All default secret patterns are returned when absent. Cannot be combined with `exclude_secret_types`. | |
| isMultiRepo | No | Only alerts for secrets detected in more than one repository. | |
| isPubliclyLeaked | No | Only alerts for secrets that were leaked publicly. | |
| excludeSecretTypes | No | A comma-separated list of secret types to exclude from the results. Cannot be combined with `secret_type`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, openWorld). The description adds material behavior the annotations cannot: the secret value is stripped from the response unconditionally, even if the request asks for it, plus the admin-access requirement. That is exactly the kind of non-obvious disclosure this dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned and what is deliberately withheld. No filler, no restatement of the tool name.
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 useful work describing the returned fields and the secret-redaction behavior, and flags the admin requirement. It omits pagination/state-filtering context, but those are adequately covered by the schema.
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% across all 15 parameters, so the schema already documents page, sort, validity, secretType, etc. The description only echoes a few of those concepts (validity, pattern/provider) without adding syntax or format detail, so the 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?
States a specific verb and resource ('List secret scanning alerts') and immediately names the payload contents (pattern, provider, validity), which unambiguously separates it from the dependabot and code-scanning alert siblings in the tool 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?
Gives a clear precondition ('Requires administrator access') and frames the intended use case as triage, which tells the agent when this tool is appropriate. It does not name an alternative tool or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsheets_spreadsheets_values_appendC
Appends values to a spreadsheet.
| Name | Required | Description | Default |
|---|---|---|---|
| range | Yes | The A1 notation of a range to search for a logical table of data. Values are appended after the last row of the table. | |
| valueRange | Yes | The request body contains an instance of ValueRange. | |
| spreadsheetId | Yes | The ID of the spreadsheet to update. | |
| insertDataOption | No | How the input data should be inserted. | |
| valueInputOption | Yes | How the input data should be interpreted. | |
| includeValuesInResponse | No | Determines if the update response should include the values of the cells that were appended. By default, responses do not include the updated values. | |
| responseValueRenderOption | No | Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE. | |
| responseDateTimeRenderOption | No | Determines how dates, times, and durations in the response should be rendered. This is ignored if responseValueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and openWorldHint=true, indicating a mutating, external operation. The description adds nothing beyond this – it doesn't disclose how appended data interacts with existing tables, whether headers are auto-detected, or rate-limit/permission requirements. For a mutation tool, this is a significant gap.
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, front-loaded sentence that wastes no words. However, the extreme brevity contributes to gaps elsewhere.
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 complexity (8 parameters, nested value types, mutation behavior), the description is critically underspecified. It omits key behavioral details like how the append range is determined, interaction with existing data, and available options (insertDataOption, valueInputOption). No output schema exists 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 description coverage is 100%, so parameters are fully documented in the schema. The description adds no parameter-level detail beyond what's already provided. 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 states a specific verb (appends) and resource (values to a spreadsheet), which is clear but does not differentiate from the sibling gsheets_spreadsheets_values_update or clarify the 'logical table' append behavior. It's clear but lacks sibling differentiation within the gsheets tool family.
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 gsheets_spreadsheets_values_update, and no mention of required preconditions or idempotency considerations. The description is silent on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsheets_spreadsheets_values_updateC
Sets values in a range of a spreadsheet.
| Name | Required | Description | Default |
|---|---|---|---|
| range | Yes | The A1 notation of the values to update. | |
| valueRange | Yes | The request body contains an instance of ValueRange. | |
| spreadsheetId | Yes | The ID of the spreadsheet to update. | |
| valueInputOption | Yes | How the input data should be interpreted. | |
| includeValuesInResponse | No | Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values. If the range to write was larger than the range actually written, the response includes all values in the requested range (excluding trailing empty rows and columns). | |
| responseValueRenderOption | No | Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE. | |
| responseDateTimeRenderOption | No | Determines how dates, times, and durations in the response should be rendered. This is ignored if responseValueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, so the write nature is known. But the description adds nothing beyond the name – it does not disclose that existing cell values are overwritten, how valueInputOption affects interpretation, or what the update returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is tight. But for a 7-parameter mutation tool it is under-specified rather than appropriately sized; conciseness here is closer to omission.
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 write tool with 7 params and no output schema, the description omits overwrite semantics, auth requirements, and response behavior. An agent could call it, but not safely without reading the schema closely.
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 7 well-documented parameters, so the schema carries the meaning. The description adds no parameter detail beyond 'in a range', which is baseline 3 for fully documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (sets values in a range of a spreadsheet), which an agent can distinguish from gsheets_spreadsheets_values_get by direction of data flow. However it offers no explicit sibling differentiation and largely restates the 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?
No when-to-use guidance, no prerequisites, and no mention of the sibling gsheets_spreadsheets_values_get or when reading vs writing applies. The agent must infer context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_attachment_createA
Link an issue to something outside Linear. Linear deduplicates by URL: creating an attachment whose URL is already on the issue updates that one rather than adding a second.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | The attachment to create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and openWorldHint=true. The description adds genuinely useful behavior beyond that: URL-based deduplication means a repeat URL updates the existing attachment instead of creating a duplicate. It omits auth/permission requirements, but the dedup disclosure is real value.
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 tight sentences with zero padding, and the core purpose is front-loaded ahead of the dedup caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with full schema coverage and annotations covering the safety profile, the description is nearly complete. It does not mention the return value or side effects like the optional comment creation, but with no output schema that is a minor gap.
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 issueId, url, title and the optional fields are already documented in the schema. The description only implicitly touches the url parameter via dedup behavior, adding nothing beyond the schema 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?
States a specific verb and resource ('Link an issue to something outside Linear'), which is clear and actionable. It does not explicitly name the closest sibling (linear_attachments_for_url) or otherwise differentiate from it, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what the tool does but gives no when-to-use or when-not-to-use guidance and names no alternative. The dedup sentence is behavioral, not a usage routing rule, so the agent must infer when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_attachments_for_urlARead-onlyIdempotent
Find which issues an external URL is attached to. This is the tool for 'is this pull request already linked to an issue?'.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | The URL to look up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is covered. The description reinforces the lookup nature but adds no pagination, rate-limit, permission, or result-format context beyond what the annotations and schema already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the core action is front-loaded, and the second sentence efficiently supplies the practical use case.
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, read-only lookup, the description and annotations together cover the essential intent and safety profile, and the schema covers all parameters. It does not mention pagination behavior or return shape, but those are minor gaps for this straightforward 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 description coverage is 100%, so the input schema fully documents the url, after, and first parameters. The description adds no parameter-level syntax or format details beyond what the schema already states, making the baseline 3 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 states a specific verb ('Find'), resource ('issues an external URL is attached to'), and scope. The clarifying example query ('is this pull request already linked to an issue?') makes the purpose immediately distinguishable from sibling tools like linear_attachment_create or linear_search_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?
It gives a clear usage context via the quoted question, indicating exactly when an agent should reach for this tool. It does not explicitly name alternatives or state when not to use it, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_issue_createA
Create an issue. team_id and title are required; everything else is optional. The UUIDs for team, assignee, state and labels come from teams_list, users_list and workflow_states_list — Linear does not accept names here. Set parent_id to create a sub-issue.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | The issue to create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutation/external-scope profile is covered. The description adds genuinely useful behavior: Linear rejects names and only accepts UUIDs resolved via teams_list/users_list/workflow_states_list, and parent_id turns this into a sub-issue creation. It stops short of noting side effects like notifications or returned identity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and the required fields, followed by the ID-resolution constraint and the sub-issue tip. No filler, though the UUID guidance partially duplicates the schema text.
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 create tool whose one parameter is a deeply nested object fully documented by the schema, plus annotations covering the safety profile, the description covers the essentials an agent needs. It lacks any mention of what creation returns, which is a minor gap given there is no output schema.
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 every field including the resolver-tool hints and the sub-issue semantics. The description's parameter notes (team_id/title required, everything else optional) largely restate the schema rather than adding new meaning, so the 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?
States a specific verb and resource ('Create an issue'), which is instantly distinguishable from the list-oriented sibling linear_issues_list. It does not explicitly name a sibling it is not, so it falls short of a 5, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical invocation guidance (required vs optional fields, which resolver tools supply UUIDs, how to make a sub-issue) but never states when to reach for this tool versus alternatives such as linear_issues_list, nor any exclusion or prerequisite conditions. Usage is implied rather than framed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_issue_getARead-onlyIdempotent
Get one issue with its description, comments, sub-issues, relations and attachments. Accepts either the issue's UUID or its human identifier, such as 'ENG-123'.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | Which issue to fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds real value beyond them by disclosing the return payload scope (comments, sub-issues, relations, attachments), which matters because there is no output schema. It stops short of noting permissions or whether the nested collections are paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what is returned and followed by accepted input formats. Nothing is padded, though the second sentence duplicates schema text that the agent will already read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-read tool with a fully documented one-parameter schema and annotations covering safety, the description is nearly sufficient; it substitutes for the absent output schema by listing returned sections. Missing only edge-case behavior such as error handling for an unknown identifier or size/pagination of nested collections.
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% and the description's identifier sentence ('UUID or ENG-123') restates the schema's own parameter description almost verbatim. Baseline 3 applies: the schema carries the semantics and the description adds no syntax, format or fallback detail beyond 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 names a specific verb and resource ('Get one issue') and enumerates the payload it returns (description, comments, sub-issues, relations, attachments). The word 'one' implicitly separates it from linear_issues_list and linear_search_issues, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetching a single, already-identified issue. The description never states when to prefer this over linear_search_issues (discovery by text) or linear_issues_list (browsing), which is the most likely routing decision an agent faces here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_issue_relation_createA
Link two issues as blocking, duplicate, related or similar. 'blocks' and 'duplicate' are directional: the issue in issue_id is the one doing the blocking, or the one that is the duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | The relation to create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and openWorldHint=true, so the description must add the real behavior — and it does disclose the non-obvious directional semantics that annotations cannot express. It stops short of covering failure modes an agent would care about: whether duplicate links error, whether the relation is reversible/removable, or whether it needs write access to both issues.
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, zero redundancy, and the core action plus relation vocabulary is front-loaded before the directional caveat. Nothing needs trimming or reordering.
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 mutation with no output schema, the description covers the action, the valid relation vocabulary, and the one genuinely ambiguous aspect (directionality). It is short of full completeness only in omitting permissions/error behavior, which for an open-world write call would be worth a line.
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 baseline is 3, but the description earns extra: the schema's own field descriptions for issueId ('the issue that is related') and relatedIssueId ('the related issue') are nearly indistinguishable, and the description resolves the ambiguity by defining which side does the blocking/duplicating. It does not address the optional 'id' field or the 'input' wrapper, hence not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Link') and resource ('two issues') and enumerates the four supported relation types. An agent can immediately distinguish this from siblings such as linear_issue_create or linear_search_issues, which do not touch relations.
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 directional note tells the agent how to order the two issues for 'blocks' and 'duplicate', which is useful invocation guidance. However, it never states when to reach for this tool versus alternatives (e.g. comments or labels for soft associations), nor any prerequisites such as required permissions on both issues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_issues_listARead-onlyIdempotent
List issues, optionally filtered. Conditions on one filter object combine with AND. To find a team's open work, filter on team.key and state.type.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | No | Paging and filtering. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered by structured data. The description's contribution is the AND-combination rule for filters, but that same rule is already documented in the schema's filter field, so added value is minimal beyond confirming the semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core purpose front-loaded and the practical example last. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully documented filter schema and no output schema, the description covers purpose, filter semantics, and a usage pattern. Slightly short on pagination/ordering behavior, though that is documented in the schema's variables object.
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% and the nested comparators are fully documented, so the schema does the heavy lifting. The description's filter guidance (AND combination, team.key/state.type paths) largely repeats what the schema already states, making 3 the appropriate 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?
States a specific verb ('List') and resource ('issues') with scope note 'optionally filtered'. It distinguishes itself from the sibling write tool linear_issue_create implicitly, but never names a sibling or explicitly rule out other Linear tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use example: 'To find a team's open work, filter on team.key and state.type.' It provides clear positive usage context but no when-not guidance or named alternative for other listing scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linear_search_issuesARead-onlyIdempotent
Search issues by text, across titles and descriptions. Set include_comments to search inside comments too. This is full-text search; to filter on fields such as state or assignee, use issues_list.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | What to search for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds genuinely useful behavioral context beyond them: the search spans titles and descriptions, and comment text is only included when include_comments is set. No return-format or pagination detail, but the schema's `after`/`first` params cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does, then the one parameter worth calling out, then the routing rule. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only search wrapper whose input schema documents every field, the description supplies exactly the missing layer: search scope, the include_comments toggle, and when to prefer the sibling. Nothing an agent needs in order to call it correctly is absent.
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 baseline is 3, and the description still adds real meaning: it defines the search surface (titles and descriptions) and explains the effect of include_comments rather than restating its schema text. It does not, however, reconcile that guidance with the presence of a `filter` object 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?
Specific verb (search) plus resource (issues) plus the exact searchable fields (titles and descriptions). It explicitly names the sibling it is not (issues_list) and characterizes itself as full-text, so an agent can separate it from filter-based listing without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the alternative and the selecting condition: use issues_list to filter on fields such as state or assignee. That is clear routing guidance, though it slightly undersells the tool's own `filter` parameter, which the schema shows can narrow results on top of the text match.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_pages_createA
Create a page — as a subpage of another page, or as a row of a database by giving its data_source_id as the parent. Content comes as a markdown string Notion parses into blocks, or from a template: one or the other, never both.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The page to create. | |
| filterProperties | No | Property IDs to return on the page that comes back, instead of all of them. A page that does not have a listed property omits it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, establishing this as an external write. The description adds the meaningful markdown/template mutual exclusion. It does not disclose auth requirements, rate limits, or the allowAsync async-202 behavior, but with annotations carrying the safety profile a 3 is appropriate.
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 tightly written sentences, front-loaded with the verb and the two modes, with the exclusivity constraint phrased crisply. No wasted text.
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 complex creation tool with a fully documented schema, the description covers parent selection and content sourcing adequately. It omits the async task path (allowAsync → 202) and return shape, but with no output schema and 100% schema coverage these are minor gaps, and annotations cover the write semantics.
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 baseline is 3, but the description adds real value: it clarifies that `parent` takes `data_source_id` to make a database row and that template vs. markdown are mutually exclusive — beyond the schema's raw field docs. It doesn't add detail on `properties` or `filterProperties`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a page') and immediately delineates the two creation modes — subpage vs. database row — which is exactly what separates it from siblings like notion_pages_update. An agent can identify the tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: use a page parent for a subpage, `data_source_id` for a database row, and content comes from `markdown` OR a template, 'never both.' The mutual-exclusion rule is explicit. However, it names no sibling alternatives (e.g., update vs. create routing) and states no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_pages_update_markdownA
Replace a page's content with Markdown, which Notion parses into blocks. This replaces the whole body, so read it first if you mean to edit rather than overwrite.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The new content. | |
| pageId | Yes | The ID of the page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true but omit destructiveHint, so the description's warning that it 'replaces the whole body' and destroys existing content carries real behavioral weight beyond the structured fields. It does not cover the async 202 path or the allowDeletingContent guard, both of which remain only 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?
Two sentences, zero filler, with the destructive scope front-loaded before the read-first advice. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and full parameter documentation, the description covers the core risk (whole-body overwrite) and parsing behavior. It would be stronger if it acknowledged the non-replace operations and async responses that the schema supports.
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% and the nested body definitions are thoroughly documented, so the schema does the heavy lifting. The description adds no syntax or format detail for pageId or body beyond what the schema already states; 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?
States a specific verb ('Replace') and resource ('a page's content with Markdown') and immediately explains the Markdown-to-blocks translation, which is the defining trait versus the generic notion_pages_update sibling. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional advice ('read it first if you mean to edit rather than overwrite') that tells the agent when not to use it blindly. It does not name a sibling alternative or mention the partial-edit operations (update_content, insert_content) the schema exposes, so the routing guidance is incomplete but present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_chat_post_messageA
Send a message to a Slack channel, private group, or DM. Provide text for a plain message; set thread_ts to reply inside an existing thread.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The main body text of the message. Required unless blocks or attachments are provided. Used as the fallback string for notifications when blocks are provided, so it is worth setting even then. | |
| parse | No | Change how messages are treated. Accepts 'none' or 'full'. | |
| blocks | No | A JSON-based array of structured Block Kit blocks. | |
| mrkdwn | No | Disable Slack markup parsing by setting to false. Defaults to true. | |
| channel | Yes | An encoded ID or channel name that represents a channel, private group, or IM channel to send the message to. Prefer the encoded ID (e.g. 'C123ABC456'). | |
| iconUrl | No | URL to an image to use as the icon for this message. Requires the chat:write.customize scope. | |
| metadata | No | Application-specific metadata to attach to the message. | |
| threadTs | No | Provide another message's 'ts' value to make this message a reply in that thread. Avoid using a reply's ts value; use the parent's. | |
| username | No | Set the bot's user name. Requires the chat:write.customize scope. | |
| iconEmoji | No | Emoji to use as the icon for this message, e.g. ':chart_with_upwards_trend:'. Requires the chat:write.customize scope. | |
| linkNames | No | Find and link user groups. | |
| attachments | No | A JSON-based array of structured attachments. | |
| unfurlLinks | No | Pass true to enable unfurling of primarily text-based content. | |
| unfurlMedia | No | Pass false to disable unfurling of media content. | |
| markdownText | No | Accepts message text formatted in markdown. Limit this field to 12,000 characters. Cannot be used together with blocks or text. | |
| replyBroadcast | No | Used in conjunction with thread_ts and indicates whether the reply should be made visible to everyone in the channel. Defaults to false. | |
| unfurlAppLinks | No | Pass true to enable unfurling of links to installed apps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so the write/external nature is covered. The description adds the threading behavior, but does not disclose required scopes, rate limits, message-size limits, or what a successful send returns — and most scope info already lives in the schema parameter descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and then the two most important parameter behaviors. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter tool with no output schema, the description is thin but the schema carries full parameter documentation, so an agent can call it correctly. Missing behavioral context (rate limits, required scopes, response shape) keeps it from a 5.
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 17 parameters are documented in the schema itself. The description's notes on `text` and `thread_ts` largely restate what the schema already provides, so the 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?
States a specific verb ('Send') and resource ('a message to a Slack channel, private group, or DM'), making the action and destination unambiguous. An agent can distinguish this from siblings like slack_conversations_create without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives implied usage for `text` and `thread_ts`, but there is no explicit when-to-use vs. when-not, no mention of prerequisites (e.g. chat:write scope), and no reference to alternative messaging tools such as gmail_messages_send. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_conversations_historyBRead-onlyIdempotent
Fetch recent messages from a Slack channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the conversation history hasn't been reached. Maximum of 999. | |
| cursor | No | Paginate through collections of data by setting this to the next_cursor attribute returned by a previous request's response_metadata. | |
| latest | No | Only messages before this Unix timestamp will be included in results. Default is the current time. Seconds, not milliseconds: "1700000000", not "1700000000000". A Slack ts carries a fraction, as in "1405894322.002768". | |
| oldest | No | Only messages after this Unix timestamp will be included in results. Defaults to 0. Seconds, not milliseconds: "1700000000", not "1700000000000". A Slack ts carries a fraction, as in "1405894322.002768". | |
| channel | Yes | Conversation ID to fetch history for. | |
| inclusive | No | Include messages with 'oldest' or 'latest' timestamps in results. Ignored unless either timestamp is specified. | |
| includeAllMetadata | No | Return all metadata associated with this message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered without the description's help. The description adds only the mild behavioral hint that results default to the newest messages ('recent'); it says nothing about pagination behavior, rate limits, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, so nothing needs trimming. It is arguably under-sized rather than wasteful, which is a completeness issue rather than a conciseness one.
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 7 parameters, an output schema absent, and annotations covering the safety profile, the schema does most of the work, but the description omits the temporal/pagination model (cursor-based back-paging, oldest/latest filtering) that matters for correct invocation. It is minimally adequate rather than complete.
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 every parameter (limit, cursor, latest, oldest, inclusive, includeAllMetadata) is already documented in the schema. The description adds no parameter-level meaning, so the baseline of 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 gives a clear verb+resource ('Fetch recent messages from a Slack channel'), so an agent immediately knows what it retrieves. It does not distinguish itself from siblings like slack_chat_post_message or slack_conversations_create, but the resource name is specific enough to be unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives, and no prerequisites (e.g., channel membership, bot scopes). The word 'recent' implies default ordering, but the agent is not told when this tool is preferred over other Slack read paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_conversations_openA
Open a direct message with one person, or a group message with up to eight. The channel id for a following chat_post_message comes back at channel.id. Opening the same conversation twice returns the existing one rather than making another.
| Name | Required | Description | Default |
|---|---|---|---|
| users | No | Comma-separated user IDs, between one and eight. One opens a direct message, several open a group one. The caller is always included and should not be listed. | |
| channel | No | Resume an existing conversation by id, instead of naming users. | |
| returnIm | No | Return the full conversation object rather than just its id. | |
| preventCreation | No | Check whether the conversation exists without creating one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false and openWorldHint=true already declaring this as an external mutation, the description earns credit for supplying what they don't: the idempotent no-duplicate guarantee and the return shape ('the channel id ... comes back at channel.id'), which matters because there is no output schema. Auth scopes and rate limits are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool creates and followed by the two facts that affect calling it (return path, idempotency). No filler or restatement of the title.
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 four-parameter mutation with no output schema, the description covers the essentials: what it creates, the idempotent behavior, and where the resulting id appears, which compensates for the missing output schema. It omits permission/scope requirements and what a group conversation means at the API level, so it is not fully complete.
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 four parameters (users, channel, returnIm, preventCreation) are already documented in the schema; the baseline is 3. The description's 'one person, or a group message with up to eight' merely restates the users parameter mapping that the schema already gives, adding no syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (open) and resource (direct or group message conversation) and immediately scopes it with 'with one person, or a group message with up to eight'. It also ties itself to the downstream sibling slack_chat_post_message, so an agent can place it correctly among the Slack conversation tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear: this is the step you take before chat_post_message, and the idempotency note ('opening the same conversation twice returns the existing one') tells the agent it is safe to call without dedup logic of its own. It stops short of explicit when-not guidance, e.g. that a conversation already known by id can be used directly without calling open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_conversations_repliesARead-onlyIdempotent
Fetch a thread of messages. Pass the parent message's ts as the thread identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| ts | Yes | Unique identifier of either a thread's parent message or a message in the thread. Prefer the parent message's ts. | |
| limit | No | The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list has not been reached. | |
| cursor | No | Paginate through collections of data by setting this to the next_cursor attribute returned by a previous request's response_metadata. | |
| latest | No | Only messages before this Unix timestamp will be included in results. Defaults to the current time. Seconds, not milliseconds: "1700000000", not "1700000000000". A Slack ts carries a fraction, as in "1405894322.002768". | |
| oldest | No | Only messages after this Unix timestamp will be included in results. Defaults to 0. Seconds, not milliseconds: "1700000000", not "1700000000000". A Slack ts carries a fraction, as in "1405894322.002768". | |
| channel | Yes | Conversation ID to fetch the thread from. | |
| inclusive | No | Include messages with 'oldest' or 'latest' timestamps in results. Ignored unless either timestamp is specified. | |
| includeAllMetadata | No | Return all metadata associated with this message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered structurally. The description adds the important semantic that ts identifies a thread anchor, but says nothing about pagination behavior, ordering, or rate limits that would enrich the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the one input detail that matters. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read tool with no output schema, the description leaves notable gaps: nothing about pagination via cursor, time-window filtering with oldest/latest, or the shape of the returned thread. The thread-anchor guidance is helpful but the definition is only minimally complete.
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 eight parameters are documented in the schema itself, making 3 the baseline. The description's note about ts is essentially a restatement of the schema's 'Prefer the parent message's ts' and adds nothing about limit, cursor, oldest, latest, or inclusive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetch a thread of messages. An agent can tell this apart from most siblings, though it never explicitly contrasts itself with slack_conversations_history, which is the nearest alternative for reading channel messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete usage instruction (pass the parent message's ts as the thread identifier), which is more than implied usage. However, it never states when to use this versus slack_conversations_history or how to obtain a parent ts, so routing still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_users_listARead-onlyIdempotent
List members of the workspace. Use this to resolve a person's name to the user ID that Slack mentions and filters expect.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list has not been reached. Providing no limit value will result in Slack attempting to deliver you the entire result set. | |
| cursor | No | Paginate through collections of data by setting this to the next_cursor attribute returned by a previous request's response_metadata. | |
| teamId | No | Encoded team id to list users in. Required if the token belongs to an org-wide app. | |
| includeLocale | No | Set this to true to receive the locale for users. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, and the description adds nothing behavioral on top of them. It says nothing about pagination behavior, the teamId requirement for org-wide tokens, or rate limits, so the structured fields carry the whole load.
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, purpose first and the resolution use case second, with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, zero-required list tool with no output schema, the description covers what it returns only implicitly ('user ID'). It omits pagination guidance and the org-wide token/teamId caveat, leaving the agent to discover those from the schema.
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 limit, cursor, teamId and includeLocale are already fully documented in the schema. The description adds no parameter-level meaning beyond that, which makes the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List members of the workspace') and adds the resolution intent, so an agent can distinguish it from slack_chat_post_message. It does not name a sibling alternative, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use case: resolving a person's name to the user ID that mentions and filters expect. There is no explicit when-not-to-use or named alternative, but the triggering context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tavily_searchA
Execute a real-time web search optimized for AI agents. Use when sources are unknown or current web context is needed. Prefer search_depth advanced with chunks_per_source 3 for stronger evidence per source.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to execute. | |
| topic | No | Search category. The server applies `general` when this is absent. `news` automatically enables `include_published_date`. | |
| country | No | Boost results from a country using Tavily's lowercase English country name (for example `united states`). Available only when `topic` is `general`. | |
| endDate | No | Return results before this date (`YYYY-MM-DD`). | |
| language | No | Boost or filter results by language — an ISO 639-1 code (for example `en`, `fr`, `zh-cn`) or English language name (for example `english`, `french`). | |
| startDate | No | Return results after this date (`YYYY-MM-DD`). | |
| timeRange | No | Filter by publish or last-updated date window. | |
| exactMatch | No | Return only results containing the exact quoted phrase(s) in the query. | |
| maxResults | No | Maximum search results to return. The server applies 10 when this is absent. | |
| safeSearch | No | Filter adult or unsafe content. Not supported when `search_depth` is `fast` or `ultra-fast`. | |
| searchDepth | No | Latency/relevance tradeoff. The server applies `basic` when this is absent. `advanced` costs 2 credits; `basic`, `fast` and `ultra-fast` cost 1 credit. | |
| includeUsage | No | Include credit usage in the response. | |
| includeAnswer | No | Include an LLM-generated answer. `true` or `basic` returns a quick answer; `advanced` returns a detailed answer. The server applies `false` when this is absent. | |
| includeImages | No | Include query-related images and per-result `images`. | |
| autoParameters | No | Let Tavily configure parameters from the query. Explicit values override auto-selected ones. `include_answer`, `include_raw_content` and `max_results` must always be set manually when using this. | |
| excludeDomains | No | Domains to exclude (max 150). | |
| includeDomains | No | Domains to include (max 300). | |
| includeFavicon | No | Include a favicon URL per result. | |
| chunksPerSource | No | Maximum relevant chunks per source in each result's `content`. The server applies 3 when this is absent. Available only when `search_depth` is `advanced`, `basic` or `fast`. Each chunk is at most 500 characters and joined with `[...]`. | |
| filterByLanguage | No | Strictly filter out non-matching languages. Requires `language`. | |
| includeRawContent | No | Include cleaned page content per result. `true` or `markdown` returns markdown; `text` returns plain text and may increase latency. The server applies `false` when this is absent. | |
| includeDomainsMode | No | How `include_domains` is applied. Requires `include_domains` to be set. | |
| includePublishedDate | No | Include `published_date` on each result. Beta feature. Automatically enabled when `topic` is `news`. | |
| filterByPublishedDate | No | Remove results outside the date window or with no detectable date. Also enables `include_published_date`. | |
| includeImageDescriptions | No | Add descriptive text per image when `include_images` is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, which is an unusual pairing for a read-only search and is left unexplained. The description adds a config recommendation (search_depth advanced, chunks_per_source 3) but doesn't clarify the credit costs or why a read-only operation isn't marked read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it does, when to use it, and an actionable configuration tip. Front-loaded and zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a large but fully documented 25-parameter schema with no output schema, the description covers the essential purpose, usage trigger, and a key tuning recommendation. It's adequate, though the odd readOnlyHint=false on a search tool could have been addressed.
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 every one of the 25 parameters is already documented in the schema. The description names two parameters and their preferred values without adding semantics beyond that, so 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?
States a specific verb+resource ('Execute a real-time web search') and scopes it ('optimized for AI agents'). It distinguishes itself from tavily_research_create by being a real-time search vs. a research task, though it never explicitly names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage trigger: 'Use when sources are unknown or current web context is needed.' This tells the agent when to reach for it over knowledge-only answers, though it doesn't name alternatives like firecrawl_scrape or tavily_research_create.
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.
61 tool updates
v0.1.0- First observed
connect - First observed
connection_status - First observed
firecrawl_monitor_checks_list - First observed
firecrawl_monitor_create - First observed
gcalendar_events_insert - First observed
gcalendar_events_list - First observed
gdocs_documents_create - First observed
gdocs_documents_get - First observed
github_actions_download_job_logs - First observed
github_actions_get_run_usage - First observed
github_actions_list_jobs_for_run - First observed
github_actions_list_pending_deployments - First observed
github_actions_list_runs_for_workflow - First observed
github_actions_list_workflow_runs - First observed
github_actions_review_pending_deployments - First observed
github_checks_list_annotations - First observed
github_code_scanning_list_alerts - First observed
github_dependabot_list_alerts - First observed
github_git_refs_create - First observed
github_git_refs_get - First observed
github_issues_create_comment - First observed
github_issues_list_for_repo - First observed
github_notifications_list - First observed
github_pulls_create - First observed
github_pulls_get - First observed
github_pulls_get_diff - First observed
github_pulls_list - First observed
github_pulls_list_files - First observed
github_pulls_list_requested_reviewers - First observed
github_pulls_update - First observed
github_releases_get_latest - First observed
github_releases_update - First observed
github_repos_compare_commits - First observed
github_repos_create_or_update_file - First observed
github_repos_get - First observed
github_repos_get_content - First observed
github_repos_get_readme - First observed
github_repos_list_commits - First observed
github_repos_list_contributors - First observed
github_repos_list_languages - First observed
github_search_code - First observed
github_search_issues - First observed
github_search_repositories - First observed
github_secret_scanning_list_alerts - First observed
gsheets_spreadsheets_values_append - First observed
gsheets_spreadsheets_values_update - First observed
linear_attachment_create - First observed
linear_attachments_for_url - First observed
linear_issue_create - First observed
linear_issue_get - First observed
linear_issue_relation_create - First observed
linear_issues_list - First observed
linear_search_issues - First observed
notion_pages_create - First observed
notion_pages_update_markdown - First observed
slack_chat_post_message - First observed
slack_conversations_history - First observed
slack_conversations_open - First observed
slack_conversations_replies - First observed
slack_users_list - First observed
tavily_search
TDQS
Scored across 61 tools
Most tools have clearly distinct provider+resource+action scopes, and descriptions often explicitly disambiguate near-neighbors (e.g. actions_list_jobs_for_run vs download_job_logs vs checks_list_annotations). However, several pairs overlap enough to risk misselection: github_pulls_get vs github_pulls_get_diff, github_repos_get_content vs github_repos_get_readme, and github_actions_list_workflow_runs vs github_actions_list_runs_for_workflow.
The dominant pattern is service_resource_action (e.g. github_pulls_list, linear_issue_create, notion_pages_create), which is predictable and readable. Minor deviations exist: connect and connection_status lack a service prefix, and GitHub Actions tools use variable ordering (actions_get_run_usage, actions_list_workflow_runs), but nothing is chaotic.
61 tools is far beyond the 15-tool well-scoped range and spans at least eight services (GitHub, Linear, Google Docs/Calendar/Sheets, Slack, Notion, Firecrawl, Tavily). Even for a multi-app integration server, this breadth creates heavy surface area and cognitive load, making selection harder than it needs to be.
Coverage is broad but shallow in critical areas. For a dev-workflow server, there is no GitHub issue creation or update, no PR merge operation, no Linear issue update/delete, no Slack channel listing, and Google Docs batch update is referenced in descriptions but not exposed as a tool, creating dead ends in core workflows.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Open-source Zapier/n8n alternative as an MCP server: agents build, run and debug your workflows.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that equips AI agents with dev workflow tools including GitHub project management, conventional commits, visual regression testing, Jira/Confluence integration, and a persistent memory knowledge graph.5 npmMIT
- FlicenseNot gradedqualityDmaintenanceA modular MCP server exposing tools for integrating with services like GitHub, Redash, Jenkins, Figma, Jira, Confluence, Teams, Datadog, PagerDuty, Slack, and Presto, enabling users to manage these platforms through natural language via an MCP client.-
- FlicenseAqualityCmaintenanceMCP server that enables AI assistants to run multi-step agent pipelines (e.g., Issue Analyst → Code Writer → Test Runner → PR Opener) from conversations, with support for Devin, shell, Python, and HTTP agents.7-
- FlicenseNot gradedqualityDmaintenanceEnterprise MCP server providing a suite of tools including file, database, GitHub, Slack, calendar, email, vector search, and Python execution, with safe defaults and OpenAI integration for automatic tool selection.-