Sage MCP
19 tools for managing Bitbucket repositories, pull requests, and pipelines.
16 tools for managing Confluence pages, spaces, and content.
15 tools for managing Discord servers, channels, and messages.
24 tools for managing GitHub repositories, issues, pull requests, and more.
19 tools for interacting with GitHub Copilot, an AI pair programmer.
22 tools for managing GitLab repositories, merge requests, and CI/CD.
14 tools for managing Gmail emails, labels, and threads.
10 tools for managing Google Docs documents.
14 tools for managing Google Sheets spreadsheets.
11 tools for managing Google Slides presentations.
20 tools for managing Jira issues, projects, and workflows.
18 tools for managing Linear issues, projects, and teams.
10 tools for managing Notion pages, databases, and content.
16 tools for interacting with OpenAI Codex, an AI code generation system.
11 tools for managing Slack channels, messages, and users.
12 tools for managing Zoom meetings, webinars, and users.
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., "@Sage MCPlist my open GitHub issues"
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.
About The Project
Sage MCP is a production-ready platform that enables you to run multiple isolated MCP servers with built-in OAuth/API key authentication for 23+ services. It provides a web interface and CLI for managing tenants and connectors, making it easy to integrate Claude Desktop with various external services.
Key Features:
Multi-tenant architecture with path-based isolation
Full MCP protocol support (Streamable HTTP, WebSocket, SSE) with protocol version negotiation
Server pooling with LRU eviction (5,000 max instances, 30-min TTL)
Session management via
Mcp-Session-Idwith resumable SSE streamsToken-bucket rate limiting (configurable RPM per tenant)
External MCP server hosting via stdio subprocess (
GenericMCPConnector)OAuth 2.0 integration with tenant-level and user-level tokens
Field-level encryption at rest (Fernet/AES) and API key authentication
Prometheus metrics, structured JSON logging, and Kubernetes health probes
Progressive rollout via feature flags (
SAGEMCP_ENABLE_*)
Related MCP server: Outsource MCP
Screenshots
Supported Connectors
340 tools across 23 native connectors, plus unlimited external MCP server support.
Architecture
High-Level System Architecture
graph TB
subgraph Client["Client Layer"]
CD[Claude Desktop]
WEB[Web Browser]
end
subgraph Platform["SageMCP Platform"]
subgraph Frontend["Frontend :3001"]
UI[React UI]
end
subgraph Backend["Backend :8000"]
subgraph Middleware["Middleware"]
RL["Rate Limiter
Token Bucket"]
CORS_MW["CORS / Origin
Validation"]
CT["Content-Type
Validation"]
end
API[FastAPI Admin API]
subgraph MCPCore["MCP Core"]
POOL["ServerPool
LRU · 5000 max"]
SESS["SessionManager
Mcp-Session-Id"]
TRANSPORT["Transport
HTTP POST · WS · SSE"]
EBUF["EventBuffer
Resumable Streams"]
end
subgraph Connectors["Connectors"]
NATIVE["Native Plugins
GitHub · GitLab · Bitbucket
Jira · Linear · Confluence
Slack · Discord · Teams
Gmail · Outlook
Google Docs · Sheets · Slides
Notion · Zoom
Excel · PowerPoint"]
EXT_MCP["External MCP Servers
via ProcessManager + stdio"]
end
subgraph Observability["Observability"]
PROM["Prometheus /metrics"]
LOGS["Structured JSON Logs"]
HEALTH["Health Probes
/health/live · ready · startup"]
end
end
subgraph Database["Database"]
DB[("PostgreSQL /
Supabase")]
end
end
subgraph External["External Services"]
EXT["GitHub · GitLab · Bitbucket
Jira · Linear · Confluence
Slack · Discord · Teams
Gmail · Outlook · Google
Notion · Zoom · Microsoft APIs"]
end
CD -->|"HTTP POST / WebSocket"| TRANSPORT
WEB -->|HTTPS| UI
UI -->|REST API| API
TRANSPORT --> POOL
POOL --> SESS
SESS --> Connectors
NATIVE -->|OAuth| EXT
EXT_MCP -->|stdio| EXT
API -->|ORM| DB
style CD fill:#e1f5ff
style WEB fill:#e1f5ff
style UI fill:#fff3e0
style API fill:#f3e5f5
style POOL fill:#e8f5e9
style SESS fill:#e8f5e9
style TRANSPORT fill:#e8f5e9
style EBUF fill:#e8f5e9
style NATIVE fill:#e8f5e9
style EXT_MCP fill:#e8f5e9
style DB fill:#fce4ec
style EXT fill:#e0f2f1
style RL fill:#fff9c4
style CORS_MW fill:#fff9c4
style CT fill:#fff9c4
style PROM fill:#f3e5f5View Full Architecture Documentation | Includes 10+ detailed diagrams covering OAuth flows, multi-tenancy, database schema, deployment, and more.
Built With
Security
Encryption at rest -- All OAuth tokens, API keys, and connector credentials encrypted via Fernet (AES-128-CBC + HMAC), key derived from
SECRET_KEYvia PBKDF2-SHA256 (480K iterations).API key authentication -- Three scope tiers (
platform_admin,tenant_admin,tenant_user) with bcrypt-hashed storage and SHA-256 LRU cache. Feature-flagged viaSAGEMCP_ENABLE_AUTH.Transport security -- CORS origin validation, Content-Type enforcement, per-tenant token-bucket rate limiting.
Getting Started
Prerequisites
Docker and Docker Compose
Python 3.11+ (for local development)
PostgreSQL or Supabase account
Installation
Clone the repository
git clone https://github.com/mvmcode/SageMCP.git cd SageMCPSetup environment
cp .env.example .env # Edit .env with your OAuth credentials (optional for testing)Start the platform
make setup make upAccess the application
Frontend: http://localhost:3001
API Docs: http://localhost:8000/docs
Metrics: http://localhost:8000/metrics (when
SAGEMCP_ENABLE_METRICS=true)Health: http://localhost:8000/health/live |
/health/ready|/health/startup
Usage
Management Options
SageMCP provides two ways to manage your platform:
Web Interface - Visual interface at http://localhost:3001
Command-Line Interface (CLI) - Powerful CLI for automation and DevOps
Quick Start (Web Interface)
Open the web interface at http://localhost:3001
Create a new tenant
Add a connector (e.g., GitHub) and configure OAuth
Copy the MCP server URL for Claude Desktop
Quick Start (CLI)
# Install CLI
pip install -e ".[cli]"
# Initialize configuration
sagemcp init
# Create a tenant
sagemcp tenant create --slug my-tenant --name "My Tenant"
# Add a connector
sagemcp connector create my-tenant --type github --name "GitHub"
# Configure OAuth (opens browser)
sagemcp oauth authorize my-tenant github
# Test MCP tools
sagemcp mcp tools my-tenant <connector-id>
# Interactive REPL
sagemcp mcp interactive my-tenant <connector-id>Full CLI Documentation | CLI Design Document
Claude Desktop Configuration
Add to your Claude Desktop config:
{
"mcpServers": {
"sage-mcp": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-everything"],
"env": {
"MCP_SERVER_URL": "ws://localhost:8000/api/v1/{tenant-slug}/mcp"
}
}
}
}User-Level OAuth Tokens
SageMCP supports per-user OAuth tokens in addition to tenant-level credentials. See User-Level OAuth Tokens for HTTP and WebSocket examples.
Feature Flags & Configuration
SageMCP uses feature flags for progressive rollout of v2 capabilities. All flags default to false and can be enabled via environment variables.
Flag | Description | Default |
| LRU server-instance pool (5,000 max, 30-min TTL) |
|
|
|
|
| Prometheus |
|
| API key authentication and authorization |
|
Additional configuration settings:
Setting | Description | Default |
| Key for Fernet encryption and token signing (min 16 chars) | required |
| Requests per minute per tenant (token bucket) |
|
| Comma-separated allowed CORS origins |
|
| Comma-separated allowed MCP | -- |
| One-time bootstrap key to create first platform admin | -- |
Development
Running Tests
# Backend tests
make test-backend
# Frontend tests
make test-frontend
# All tests with coverage
make test-coverageAvailable Commands
make help # Show all available commands
make build # Build Docker images
make up # Start all services
make down # Stop all services
make logs # View logs
make shell # Open shell in app container
make clean # Clean up containers and volumesAdding New Connectors
Create a new connector class in
src/sage_mcp/connectors/Implement the
BaseConnectorinterfaceRegister with
@register_connectordecoratorAdd to the connector enum
See existing connectors in src/sage_mcp/connectors/ for examples.
Deployment
Docker Compose (Development)
make upKubernetes (Production)
Deploy with PostgreSQL:
helm install sage-mcp ./helmDeploy with Supabase:
helm install sage-mcp ./helm \
--set database.provider=supabase \
--set postgresql.enabled=false \
--set supabase.url=https://your-project.supabase.co \
--set supabase.serviceRoleKey=your-service-role-keyRoadmap
Tool policy language (per-connector tool enable/disable rules)
OpenTelemetry tracing
Redis-backed session persistence
See the open issues for a full list of proposed features and known issues.
Contributing
Contributions are what make the open source community amazing! Any contributions you make are greatly appreciated.
Fork the Project
Create your Feature Branch (
git checkout -b feature/AmazingFeature)Commit your Changes (
git commit -m 'Add some AmazingFeature')Push to the Branch (
git push origin feature/AmazingFeature)Open a Pull Request
License
Distributed under the Apache 2.0 License. See LICENSE for more information.
Contact
Project Link: https://github.com/mvmcode/SageMCP
Discord Community: https://discord.gg/f5RrQ6aGCS
Acknowledgments
Available Tools
13 toolsechoEcho ToolB
Echoes back the input string
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message to echo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only says 'echoes back the input string'. Lacks details on side effects, error handling, or return format. For a simple tool, minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with essential information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple echo tool with one required parameter, description is mostly complete. Implies return of same string, though explicit mention would be ideal. No output schema, but 'echoes back' suffices.
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%; parameter 'message' already described as 'Message to echo'. Description adds no additional semantic value, baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'echoes' and resource 'input string', clearly stating the tool's function. Distinct from sibling tools like 'get-annotated-message'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Sibling tools have different purposes but no explicit when/when-not advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-annotated-messageGet Annotated Message ToolC
Demonstrates how annotations can be used to provide metadata about content.
| Name | Required | Description | Default |
|---|---|---|---|
| messageType | Yes | Type of message to demonstrate different annotation patterns | |
| includeImage | No | Whether to include an example image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as side effects, permissions, or output structure. It only says it 'demonstrates annotations' without elaboration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise but insufficient. It lacks necessary information such as output format or usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and low complexity, the description should clarify what the tool returns (e.g., an annotated message). It fails to do so, leaving the agent guessing.
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 input schema already documents both parameters (messageType with enum, includeImage with default). The description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Demonstrates how annotations can be used to provide metadata about content' is vague and meta. It does not clearly state what the tool does (e.g., retrieves a message with annotations) or distinguish it from other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings. The context signals list 13 other tools with no differentiation criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-envPrint Environment ToolA
Returns all environment variables, helpful for debugging MCP server configuration
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It states the tool returns environment variables, but does not disclose behavioral traits like output format, security implications (e.g., sensitive data exposure), or that it's a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Every part is essential and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with zero parameters, no output schema, and no nested objects, the description is complete. It states purpose and usage context, sufficient for an AI agent to select and invoke 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?
No parameters exist, and schema coverage is 100%. The description adds the 'debugging' context, which provides additional meaning beyond the schema. Baseline 4 is appropriate given no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'returns all environment variables' with a specific verb and resource. The additional context 'helpful for debugging MCP server configuration' distinguishes it from sibling tools, none of which retrieve environment variables.
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 usage context 'debugging MCP server configuration', which guides when to use. No explicit when-not or alternative tools are needed as the tool's function is unique among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-resource-linksGet Resource Links ToolC
Returns up to ten resource links that reference different types of resources
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of resource links to return (1-10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as whether the operation is read-only, idempotent, or has side effects. It only states the result content, which is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded and concise. Every word serves a purpose, though additional context could be added without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is adequate but does not explain what a 'resource link' is or how it differs from sibling tools, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'count', which is well-documented. The description adds no additional meaning beyond the schema, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Returns up to ten resource links' which is clear about action and resource, but does not distinguish from sibling 'get-resource-reference', making the purpose somewhat vague in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'get-resource-reference'. The description lacks any context about appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-resource-referenceGet Resource Reference ToolC
Returns a resource reference that can be used by MCP clients
| Name | Required | Description | Default |
|---|---|---|---|
| resourceType | No | Text | |
| resourceId | No | ID of the text resource to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only states the return type (resource reference) without mentioning side effects, authorization, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence. However, brevity comes at the cost of completeness; it could be expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description fails to explain what a 'resource reference' is or how the response should be used. It lacks sufficient context for an AI agent to invoke 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 50% (only resourceId has a description). The tool description adds no additional meaning to either parameter, leaving the resourceType enum undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Returns a resource reference that can be used by MCP clients' states the basic action but does not differentiate from sibling tools like get-resource-links or get-structured-content. It is not a tautology but lacks specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any prerequisites, constraints, or use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-structured-contentGet Structured Content ToolB
Returns structured content along with an output schema for client data validation
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Choose city |
Output Schema
| Name | Required | Description |
|---|---|---|
| temperature | Yes | Temperature in celsius |
| conditions | Yes | Weather conditions description |
| humidity | Yes | Humidity percentage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully inform about behavior. It does not disclose side effects, authentication needs, rate limits, or error handling. It implies a read operation but lacks explicit safety guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is direct and front-loaded with the action. It contains no fluff and is appropriately sized for the simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered externally. However, the description does not explain the relationship between the location parameter and the returned structured content, leaving some context 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?
The input schema covers 100% of parameters with a clear description for 'location'. The tool description adds no additional parameter context beyond what the schema provides, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns structured content with an output schema for client data validation. It uses a specific verb 'returns' and specifies the resource. However, it does not explicitly differentiate from sibling tools, leaving some ambiguity about uniqueness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. Sibling tools like 'echo' exist, but no comparison or usage context is given, leaving agents without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-sumGet Sum ToolB
Returns the sum of two numbers
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First number | |
| b | Yes | Second number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits, but it does not mention error handling, overflow behavior, or limitations. It only states the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no redundant information, making it highly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two numbers, no output schema), the description adequately explains the behavior. However, it could be improved by mentioning the return type or potential edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters. The tool description adds no extra meaning beyond what the schema provides, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Returns' and the resource 'sum of two numbers', making the purpose unambiguous. The sibling tools are unrelated, so no confusion arises.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-tiny-imageGet Tiny Image ToolA
Returns a tiny MCP logo image.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether the tool is read-only, has side effects, or any other behavioral traits beyond returning an image.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the purpose without any 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?
Given the tool's simplicity (no params, no output schema), the description is largely complete. It could mention the expected output format or size, but it is adequate for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters and schema coverage is 100%, so the description does not need to add parameter information. Baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns a tiny MCP logo image, which is a specific verb+resource. It differentiates from siblings as none of them are image-related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not indicate any prerequisites or context for invoking this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gzip-file-as-resourceGZip File as Resource ToolA
Compresses a single file using gzip compression. Depending upon the selected output type, returns either the compressed data as a gzipped resource or a resource link, allowing it to be downloaded in a subsequent request during the current session.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the output file | README.md.gz |
| data | No | URL or data URI of the file content to compress | https://raw.githubusercontent.com/modelcontextprotocol/servers/refs/heads/main/README.md |
| outputType | No | How the resulting gzipped file should be returned. 'resourceLink' returns a link to a resource that can be read later, 'resource' returns a full resource object. | resourceLink |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It mentions output modes and that the result can be used later, but does not detail side effects, authorization needs, or file size limits. It's adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose. Every word adds value, with no fluff or repetition. It is concise and well-structured.
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 compression tool with 3 fully described parameters and no output schema, the description covers the essential behavior. It could mention that the original file is not modified, but overall it is sufficiently 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% from the input schema, so the description adds minimal extra meaning beyond restating the output type options. The baseline score of 3 is appropriate as the schema already provides good parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('compresses a single file using gzip compression') and the resource, with specific details about output types. It effectively distinguishes from sibling tools like echo or get-env by focusing on a compression operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. It simply describes what it does without context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate-research-querySimulate Research QueryA
Simulates a deep research operation that gathers, analyzes, and synthesizes information. Demonstrates MCP task-based operations with progress through multiple stages. If 'ambiguous' is true and client supports elicitation, sends an elicitation request for clarification.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The research topic to investigate | |
| ambiguous | No | Simulate an ambiguous query that requires clarification (triggers input_required status) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses progress stages and elicitation behavior for ambiguous queries, but does not cover all behavioral aspects like side effects or final output nature.
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 core purpose, no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description should explain return value; it mentions progress stages but not final output. Adequate for a simulation tool but missing return specification.
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. Description adds extra meaning to 'ambiguous' parameter by specifying it triggers input_required status and elicitation request, surpassing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it simulates a deep research operation and demonstrates MCP task-based operations, distinguishing it from sibling tools like echo or get-sum which are unrelated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for demonstration/simulation but does not explicitly state when to use or not use this tool compared to alternatives, leaving usage context inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle-simulated-loggingToggle Simulated LoggingB
Toggles simulated, random-leveled logging on or off.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states it toggles logging on/off, without detailing what 'simulated' means, side effects, or state persistence.
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, no wasted words. Could be slightly expanded without losing conciseness, but currently efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple toggle tool with no parameters, but lacks context on scope (global/session) and effect on other tools. Siblings provide similar patterns, so more detail would help.
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?
No parameters exist; schema coverage is 100%. The description adds no parameter info but none is needed. Baseline score of 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'toggles' and resource 'simulated, random-leveled logging', clearly distinguishing it from sibling tools like 'toggle-subscriber-updates'.
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. With sibling tools like 'toggle-subscriber-updates', the description should clarify scenarios for each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle-subscriber-updatesToggle Subscriber UpdatesA
Toggles simulated resource subscription updates on or off.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the basic action (toggling on/off) but, in the absence of annotations, does not clarify side effects, persistence, or state changes beyond the immediate toggle.
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, concise sentence that directly states the tool's purpose with no unnecessary words or repetition.
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 no-parameter toggle tool, the description is mostly complete, though a brief note on the scope or effect of 'subscriber updates' would enhance understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no parameters and 100% schema coverage, the description adds no parameter details but is adequate given the simplicity; baseline of 4 applies per zero-param rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'toggles' and the resource 'simulated resource subscription updates', making it distinct from sibling tools like 'toggle-simulated-logging'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as 'toggle-simulated-logging' or other sibling tools. The agent lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger-long-running-operationTrigger Long Running Operation ToolC
Demonstrates a long running operation with progress updates.
| Name | Required | Description | Default |
|---|---|---|---|
| duration | No | Duration of the operation in seconds | |
| steps | No | Number of steps in the operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions 'progress updates' but omits critical details such as whether the operation is destructive, how to cancel it, or any side effects. This is insufficient for an agent to understand the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise but at the expense of clarity. It is front-loaded with the weak verb 'Demonstrates', reducing effectiveness. While not verbose, it lacks structure and important details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two simple numeric parameters) and absence of an output schema, the description should provide sufficient behavioral context. It fails to do so, omitting safety, cancellation, and result details. The mention of progress updates is the only meaningful addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters ('duration' and 'steps'), so the schema already documents their meaning. The description adds no extra semantic value beyond noting progress updates, which is not parameter-specific. Baseline score 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 says 'Demonstrates a long running operation', which essentially restates the tool's name without specifying a concrete action. 'Demonstrates' is vague and does not clearly indicate that the tool triggers an operation, making it a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when or why to use this tool. The description does not mention use cases, prerequisites, or alternatives among sibling tools, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
echo - First observed
get-annotated-message - First observed
get-env - First observed
get-resource-links - First observed
get-resource-reference - First observed
get-structured-content - First observed
get-sum - First observed
get-tiny-image - First observed
gzip-file-as-resource - First observed
simulate-research-query - First observed
toggle-simulated-logging - First observed
toggle-subscriber-updates - First observed
trigger-long-running-operation
TDQS
Scored across 13 tools
Each tool has a clearly distinct purpose: echo returns input, get-env returns environment variables, get-sum adds numbers, etc. No two tools serve overlapping functions.
All tool names follow a consistent lowercase-hyphenated verb-noun pattern (e.g., get-annotated-message, gzip-file-as-resource, toggle-subscriber-updates). No mixing of styles.
With 13 tools, the count is well-scoped for a demonstration server that showcases various MCP features. It's neither too sparse nor overly heavy.
The tool set covers a broad range of MCP capabilities (resources, annotations, logging, long-running ops, etc.), but as a demo it misses some common features like database or file system operations.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Cloudflare Workers-based MCP server implementation that supports OAuth login and bearer token authentication, allowing secure connection from MCP clients like Claude Desktop and the MCP Inspector.1-
- AlicenseAqualityDmaintenanceAn MCP server that enables AI applications to access 20+ model providers (including OpenAI, Anthropic, Google) through a unified interface for text and image generation.230MIT
- FlicenseNot gradedqualityDmaintenanceA production-ready MCP OAuth 2.1 server implementation with analytics and security monitoring, enabling secure authentication for MCP clients like Claude Desktop and Cursor.4-
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server with file management, HTTP requests, system info, and environment variable tools, plus a management UI and dual transport for Claude Desktop and Claude.ai.291 npmMIT