Skip to main content
Glama
RichFerry

Production MCP Template

by RichFerry

Production MCP Template

一个偏生产级、可扩展、可直接二次开发的 Python MCP 服务模版。它不是单文件 demo,而是围绕最新 MCP 官方 Python SDK、当前 Streamable HTTP 规范、远程发布形态、认证钩子、可观测性、后台任务、资源/提示/工具分层做出的完整工程骨架。

设计目标

  • 使用官方 mcp Python SDK 的稳定 v1.x 能力,而不是临时 API。

  • 默认面向远程部署:Streamable HTTP + json_response + stateless_http

  • 保留 stdio 兼容,方便本地接入 Claude / Inspector / 其他 MCP host。

  • 工具、资源、提示、服务层、传输层、认证层清晰分离。

  • 提供健康检查、readiness、Prometheus metrics、server.json、Docker、CI、类型检查和测试。

  • 演示 MCP 新能力的落点:structured output、elicitation、sampling、resource templates、completion、event replay。

Related MCP server: MCP Server Hero

已实现能力

1. 核心工程骨架

  • src/mcp_template/app

    • 容器、生命周期、Server Factory。

  • src/mcp_template/services

    • 纯服务层,承载业务逻辑,不直接依赖传输协议。

  • src/mcp_template/modules

    • MCP capability 层,负责注册 tools/resources/prompts

  • src/mcp_template/security

    • Token verifier 与认证装配。

  • src/mcp_template/transport

    • SQLite event store,用于 Streamable HTTP 的重放与恢复准备。

  • src/mcp_template/types

    • 所有结构化返回模型。

2. 内置模块

  • system

    • 健康检查、echo、能力目录、构建信息资源、系统提示。

  • workspace

    • 安全的只读工作区扫描、文本读取、资源清单。

  • jobs

    • 后台任务提交、状态查询、任务资源模板、postmortem prompt。

  • design

    • 功能 brief 采集、工具契约设计、host sampling 示例、生产准备模板资源。

3. 生产配套

  • Streamable HTTPstdio 双传输。

  • DNS rebinding 防护与 Origin/Host allowlist。

  • JWT / static bearer 两种 verifier 装配路径。

  • healthzreadyzmetricsmanifestserver.json

  • SQLite event replay store。

  • ruff + mypy + pytest + GitHub Actions

  • Dockerfile.env.exampleMakefileserver.json

为什么这套模版偏“当前最优实践”

这份模版刻意吸收了近一段时间 MCP 官方和社区里最值得保留的思路:

  • 优先使用官方 SDK 的 FastMCP 稳定能力,而不是依赖不确定封装。

  • 默认使用 Streamable HTTP,并保留 stdio,适配本地 host 与远程部署双场景。

  • 把“协议层”与“业务层”拆开,避免工具函数直接长成不可测试的业务体。

  • 让 structured output 成为默认,而不是把一切结果都塞进字符串。

  • 把认证、事件重放、后台任务、可观测性当成一等公民,而不是上线前才补。

  • elicitationsampling 作为未来高级能力保留入口。

快速开始

1. 安装

uv sync --all-groups

2. 配置

cp .env.example .env

3. 运行诊断

uv run mcp-template doctor

4. 运行 HTTP 模式

uv run mcp-template run --transport streamable-http

默认监听:

  • Host: 127.0.0.1

  • Port: 8000

  • MCP endpoint: /mcp

5. 运行 stdio 模式

uv run mcp-template run --transport stdio

与 Host / Inspector 联调

Claude Code / Claude

claude mcp add --transport http mcp-template http://localhost:8000/mcp

MCP Inspector

npx -y @modelcontextprotocol/inspector

然后连接:

http://localhost:8000/mcp

常用命令

uv run mcp-template show-config
uv run mcp-template doctor
uv run mcp-template run --transport stdio
uv run mcp-template run --transport streamable-http
uv run ruff format .
uv run ruff check .
uv run mypy src
uv run pytest

或者:

make sync
make fmt
make lint
make test
make run-http
make run-stdio
make doctor

配置说明

关键环境变量如下:

  • MCP_TEMPLATE_DEFAULT_TRANSPORT

    • stdio / sse / streamable-http

  • MCP_TEMPLATE_JSON_RESPONSE

    • 是否为 Streamable HTTP 返回 JSON response

  • MCP_TEMPLATE_STATELESS_HTTP

    • 是否启用 stateless 模式

  • MCP_TEMPLATE_EVENT_STORE_BACKEND

    • none / sqlite

  • MCP_TEMPLATE_EVENT_STORE_PATH

    • SQLite 事件库路径

  • MCP_TEMPLATE_ENABLED_MODULES

    • 启用哪些 capability 模块

  • MCP_TEMPLATE_AUTH_MODE

    • none / static-bearer / jwt

  • MCP_TEMPLATE_AUTH_ISSUER_URL

    • 认证发行方

  • MCP_TEMPLATE_AUTH_RESOURCE_SERVER_URL

    • 资源服务器 URL

  • MCP_TEMPLATE_JWT_JWKS_URL

    • JWT 验签 JWKS 地址

项目结构

.
├── .github/workflows/ci.yml
├── CLAUDE.md
├── Dockerfile
├── Makefile
├── server.json
├── src/mcp_template
│   ├── app
│   ├── core
│   ├── modules
│   ├── security
│   ├── services
│   ├── transport
│   ├── types
│   ├── cli.py
│   └── config.py
└── tests

如何扩展

新增一个业务模块

  1. src/mcp_template/modules/ 下新增模块文件。

  2. 在模块里实现 register(server, container) -> ModuleDescriptor

  3. 把工具逻辑放入 services/,不要直接堆在 tool 函数里。

  4. src/mcp_template/modules/__init__.py 注册。

  5. 写对应测试。

接入真实外部系统

推荐路径:

  1. services/ 新增客户端或仓储层。

  2. tenacity 包装重试。

  3. 设定 timeout、错误分类和结构化输出。

  4. 如果有副作用,明确 tool annotation 和鉴权边界。

增加远程认证

推荐路径:

  1. 保持 AuthSettings 与 verifier 解耦。

  2. 优先接入标准 issuer + JWKS。

  3. 作用域设计要贴近真实操作边界。

  4. 不要把“静态 token”当成真正生产方案。

健康与运维接口

  • GET /healthz

    • 进程级健康与模块状态。

  • GET /readyz

    • 就绪探针。

  • GET /metrics

    • Prometheus 指标。

  • GET /manifest

    • 运行时 manifest。

  • GET /server.json

    • Registry 风格输出。

当前测试状态

已验证:

  • ruff check

  • mypy src

  • pytest

后续建议

如果你要把这个模版推进到更重的企业场景,建议继续演进:

  • OpenTelemetry tracing / metrics exporter

  • Redis 或 Postgres event store

  • 多租户鉴权与 header variable 注入

  • MCP Apps / ui:// 资源

  • 更完整的 OAuth Authorization Server provider

  • 更强的审计日志与策略引擎

设计依据与参考

这份模版主要基于以下官方资料与实现方向:

如果你希望,我还可以在这份模版上继续扩展:

  • 多租户 SaaS 版本

  • 接入真实数据库 / Redis / S3 / Queue

  • OAuth 资源服务器完整实现

  • MCP Apps 前端壳层

  • 面向某个具体业务域的企业级 server 脚手架

Available Tools

11 tools
design_collect_feature_briefA
Read-onlyIdempotent

Collect missing design inputs, optionally using MCP elicitation, and return a normalized brief.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
goalNo
primary_userNo
latency_budget_msNo
data_sensitivityNo
auth_requiredNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
goalYes
primary_userYes
latency_budget_msYes
data_sensitivityYes
auth_requiredYes
recommended_modulesYes
notesNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent behavior. The description adds that it 'optionally using MCP elicitation', providing useful behavioral context beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys purpose and key behaviors with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Despite an output schema existing, the description does not explain what constitutes 'missing design inputs', how elicitation works, or provide guidance on parameter usage. This is insufficient for a tool with 6 optional parameters and no parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain any of the 6 parameters. 'Collect missing design inputs' only vaguely alludes to the parameters without adding semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the tool's action: 'Collect missing design inputs' and output: 'return a normalized brief'. This distinguishes it from sibling tools like 'design_refine_with_sampling' which refines existing designs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives. It does not mention prerequisites, typical use cases, 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.

design_refine_with_samplingC
Read-onlyIdempotent

Use host sampling when available to draft a richer rollout or feature brief.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYes
constraintsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
draftYes
modelNo
errorNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, idempotentHint, and openWorldHint. The description adds the behavioral nuance of using host sampling conditionally, but does not explain what happens when sampling is unavailable. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, but it sacrifices clarity for brevity. It is front-loaded with the action but could be restructured for better readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

The tool has two parameters and an output schema, yet the description omits key context such as the meaning of 'host sampling', the outcome when sampling is unavailable, and how the draft is generated. This leaves significant ambiguity for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%; the description does not mention the goal or constraints parameters. It adds no meaning beyond the schema's field names and types, failing to compensate for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

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

The description states the tool drafts a rollout or feature brief using host sampling, but the term 'host sampling' is unexplained. It vaguely distinguishes from sibling tools but does not clearly define its specific role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like design_collect_feature_brief or design_tool_contract. The phrase 'when available' hints at a condition but lacks clarity and comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

design_tool_contractC
Read-onlyIdempotent

Generate a design-time contract preview for a future MCP tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
tool_nameYes
purposeYes
side_effectsNoread
auth_requiredNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
tool_nameYes
purposeYes
side_effectsYes
auth_requiredYes
recommended_annotationsYes
schema_sectionsYes
operational_guidanceYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations indicate readOnlyHint and idempotentHint, which align with the description of generating a preview. However, the description adds no additional behavioral context 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise but too terse given the tool's complexity (4 parameters, 0% schema coverage). It sacrifices completeness for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

While an output schema exists, the description does not explain the return values or the role of parameters. The tool deals with design-time contracts, but the description lacks details on what constitutes a contract, making it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention any of the four parameters (tool_name, purpose, side_effects, auth_required). It adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the verb 'Generate' and the resource 'design-time contract preview for a future MCP tool', which is specific and distinct from sibling tools like design_collect_feature_brief and design_refine_with_sampling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. There is no mention of when not to use it or any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jobs_get_statusA
Read-onlyIdempotent

Fetch a specific background job status.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and idempotentHint. Description adds no behavioral traits beyond the obvious read operation. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. Front-loaded with verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple fetch tool with one param and no output schema, the description is adequate but lacks return value expectations or any additional context about status values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema coverage is 0%, so description must compensate. It only implies job_id is the identifier without adding syntax, format, or source context. Insufficient for a single critical parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the verb 'Fetch' and resource 'specific background job status'. It distinguishes from sibling 'jobs_list' which likely lists multiple jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like 'jobs_list'. Implied use for a single job status check, but lacks when-not-to-use or prerequisite info.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jobs_listB
Read-onlyIdempotent

List recent background jobs with current status and results.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is clear. Description adds that results include status and results and are recent, but lacks details like ordering or pagination. Adds some value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with verb, no unnecessary words. Efficiently conveys the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

Given low complexity (1 param, no output schema) and good annotations, the description is adequate for basic use. However, missing parameter documentation and no return structure details leave gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Schema has one parameter (limit) with 0% description coverage, and the description does not mention it at all. The description fails to add any meaning to the parameter that the schema's type and default don't already provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the tool lists recent background jobs with status and results, which is a specific verb+resource combination. It effectively distinguishes from siblings like jobs_get_status (single job) and jobs_submit_blueprint (submission).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention exclusions or context, e.g., that for a specific job's details one should use jobs_get_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jobs_submit_blueprintC

Submit a demo background job that models long-running orchestration work.

ParametersJSON Schema
NameRequiredDescriptionDefault
duration_secondsNo
modulesNo

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description must carry behavioral disclosure. It only hints at long-running orchestration but omits side effects (e.g., async behavior, job queuing) or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no waste, but could benefit from structuring to front-load key details like async nature or parameter hints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Given simple schema and no output schema, description should still explain return behavior or how to track the submitted job. It lacks that, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Description provides zero information about the two parameters (duration_seconds, modules) which have defaults. Schema coverage is 0%, so description fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description clearly states it submits a demo background job for orchestration work, distinguishing from sibling tools like jobs_get_status and jobs_list. However, it does not elaborate on what 'blueprint' means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, or any prerequisites. The description lacks usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_capability_catalogA
Read-onlyIdempotent

List all registered modules and the capability surface each one exposes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
modulesYes

TDQS

A4.3/5.0
Behavior3/5

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

The description aligns with annotations (readOnlyHint, idempotentHint) but adds no extra behavioral details beyond stating it lists all modules. Annotations already provide the key behavioral traits, so the description adds limited value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that efficiently conveys the tool's purpose without redundancy or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

Given the tool's simplicity (no parameters, clear annotations, and an output schema that handles return values), the description is sufficiently complete. No additional information is necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

The input schema has zero parameters, so the baseline is 4. The description does not need to add parameter semantics as there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description uses a specific verb 'List' and explicitly mentions the resources 'registered modules' and 'capability surface', making the tool's purpose very clear. It naturally distinguishes from sibling tools like system_echo or workspace_inventory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

While no explicit when-to-use or when-not-to-use guidance is given, the description's clarity implies the tool is for discovering available modules and capabilities. Given its uniqueness among siblings, a score of 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_echoA
Read-onlyIdempotent

Echo structured payloads with request metadata for client integration tests.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
tagsNo
metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
tagsNo
metadataNo
request_idNo
client_idNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's safety profile is covered. The description does not add behavioral context beyond aligning with annotations; it does not describe side effects or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence that is front-loaded and contains no redundancy. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

Output schema exists, so return value details are not needed. However, the description omits parameter semantics and how tags/metadata are handled, leaving some ambiguity for a testing tool. It is barely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It does not explain the purpose of 'message', 'tags', or 'metadata'. The word 'echo' hints that inputs are returned, but no specific semantics for parameters are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the tool echoes structured payloads with request metadata for client integration tests. The verb 'echo' and context 'client integration tests' differentiate it from sibling tools like system_capability_catalog or system_health_check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Description implies usage for testing but provides no explicit guidance on when to use or when to prefer alternatives like workspace_read_text or jobs_get_status. It lacks exclusions or context about when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_health_checkA
Read-onlyIdempotent

Return current server health, transport mode, and module state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate read-only and idempotent behavior. Description adds the specific return fields (health, transport mode, module state) but does not disclose additional traits like latency or response size. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with verb, no filler. Every word provides value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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

Given no output schema, the description adequately explains return values (health, transport mode, module state) for a simple health check. No further context needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

No parameters exist, so schema coverage is 100%. Per guidelines, baseline is 4. Description does not need to add parameter info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Description clearly states the tool returns 'current server health, transport mode, and module state' with a specific verb and resource. It distinguishes well from sibling tools that are focused on design, jobs, or workspace operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

No explicit guidance on when to use vs alternatives, but given it's a simple health check with no parameters, usage is implied. Sibling tools imply this is for system diagnostics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workspace_inventoryB
Read-onlyIdempotent

Inspect the configured workspace root and return a bounded inventory summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNo
include_hiddenNo
sample_limitNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, so the safety profile is clear. The description adds the term 'bounded', which aligns with openWorldHint=false, but does not disclose any additional behavioral traits like rate limits, authorization needs, or potential side effects. With annotations covering the core aspects, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently conveys the core purpose. Every word is purposeful with no redundant or extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Despite low complexity and the presence of annotations, the description fails to cover key aspects: the meaning of the three parameters (especially max_depth and sample_limit), what a 'bounded inventory summary' includes, and the behavior of include_hidden. An output schema is absent, leaving the agent uninformed about the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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

Schema description coverage is 0%, meaning the schema provides no descriptions for the three parameters (max_depth, include_hidden, sample_limit). The description does not explain any parameter's meaning, effect, or constraints, leaving the agent without guidance on how to use them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description uses the specific verb 'inspect' and clearly identifies the resource ('configured workspace root') and the outcome ('return a bounded inventory summary'). It defines a unique action different from sibling tools like workspace_read_text, design_*, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., workspace_read_text for reading file contents, design_* for design tasks). There is no mention of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workspace_read_textB
Read-onlyIdempotent

Read a UTF-8 text file under the workspace root with traversal protection.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYes
max_bytesNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate read-only and idempotent behavior. The description adds 'traversal protection' as a safety constraint. However, it does not disclose behavior on file not found, encoding errors, or the effect of the max_bytes parameter. The description adds modest value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the essential action and a key safety aspect. Every word earns its place with no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

For a simple tool with two parameters and no output schema, the description is minimally adequate. It states the input location and encoding but omits what is returned (the file content) and does not hint at error conditions or behavior when max_bytes is exceeded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. While 'relative_path' is somewhat explained by the tool's purpose (reading under workspace root), 'max_bytes' receives no extra explanation. The description does not add meaning beyond parameter names or clarify defaults and constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description clearly states the action (Read) and the resource (UTF-8 text file under workspace root). It adds a specific safety detail ('traversal protection') that further clarifies the purpose and distinguishes it from sibling tools like workspace_inventory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of file types, size limits, or comparisons with sibling tools. The description solely states what the tool does without usage context.

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. Dates show when Glama detected each change.

  1. 11 tool updatesv0.1.0
    • First observeddesign_collect_feature_brief
    • First observeddesign_refine_with_sampling
    • First observeddesign_tool_contract
    • First observedjobs_get_status
    • First observedjobs_list
    • First observedjobs_submit_blueprint
    • First observedsystem_capability_catalog
    • First observedsystem_echo
    • First observedsystem_health_check
    • First observedworkspace_inventory
    • First observedworkspace_read_text

TDQS

A3.6/5.0
Disambiguation5/5

All tools have clearly distinct purposes grouped by domain: design, jobs, system, and workspace. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent domain_action snake_case pattern (e.g., design_collect_feature_brief, jobs_get_status).

Tool Count5/5

11 tools is well-scoped for a template covering design, jobs, system, and workspace with no redundancy.

Completeness4/5

Covers core workflows for each domain but lacks write operations for workspace and update/delete for jobs; acceptable for a template.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Production-ready API server template integrating FastAPI with Model Context Protocol (MCP) for LLM integration, structured logging, and comprehensive testing.
    2
    -
  • -
    license
    Not graded
    quality
    C
    maintenance
    A professional Python framework and template for building robust Model Context Protocol (MCP) servers with modular architecture, enterprise features like authentication and rate limiting, and comprehensive tooling. Provides easy-to-use APIs for registering tools, resources, and prompts with full type safety and multiple transport support.
    4
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A foundational template for building MCP servers in Python using Streamable HTTP transport. Provides example implementations of tools, resources, and prompts to help developers create custom MCP integrations for AI assistants.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RichFerry/MCP-Template'

If you have feedback or need assistance with the MCP directory API, please join our Discord server