Skip to main content
Glama

project-mcp-tools

一个 Python 框架,可通过三种协议同时暴露开发者工具:MCP(Model Context Protocol)、REST API 和 CLI——全部来自同一个共享的工具注册表。

概述

project-mcp-tools 解决了为不同消费者维护独立工具后端的问题。使用 @tool() 装饰器编写一次工具,它就会立即提供给以下使用者:

  • 通过 MCP 协议(由 FastMCP 驱动)提供给 AI 助手

  • 通过 REST API(由 FastAPI + uvicorn 驱动)提供给 HTTP 客户端

  • 通过 CLI(由 argparse 驱动)提供给 终端用户

内置工具涵盖 C++ 开发(编译、静态分析、格式化、类/测试脚手架、include 树分析)、Python 格式化校验以及 git 操作——所有这些都通过 subprocess 执行实现进程隔离。

Related MCP server: Agent Factory MCP

安装

要求: Python 3.14+、uv 包管理器

# Clone the repository
git clone <repository-url>
cd project-mcp-tools

# Install dependencies
uv sync

使用

MCP 服务器

启动一个 AI 助手可以连接的 FastMCP 服务器:

uv run mcp-server

配置你的 MCP 客户端以使用此服务器。例如,在 宿主项目(你希望工具操作的项目,而不是 project-mcp-tools 目录本身)根目录下的 opencode.json 中:

{
  "mcp": {
    "project-mcp-tools": {
      "type": "local",
      "command": ["uv", "--directory", "project-mcp-tools", "run", "mcp-server", "--target-project", "../my-host-project"]
    }
  }
}

重要提示: --directory 告诉 uv 在哪里找到 project-mcp-tools 包(pyproject.toml、依赖、venv)。--target-project 为 MCP 进程及其所有子进程设置工作目录——这是工具实际要操作的项目。该路径相对于 project-mcp-tools/ 解析(因为 uv --directory 会改变工作目录)。如果没有这种区分,git/cpp/python 工具就会在 project-mcp-tools/ 内部操作,而不是在你的宿主项目中。

REST API 服务器

在 http://0.0.0.0:8000 上启动一个 FastAPI 服务器:

uv run api --target-project ../my-host-project

每个工具都以 POST /tools/<tool_name> 的形式暴露。来自工具函数签名的查询参数会成为 JSON 请求体中的字段。

示例请求:

curl -X POST http://localhost:8000/tools/git_quick_upload \
  -H "Content-Type: application/json" \
  -d '{"message": "my commit"}'

Swagger UI 可通过 http://localhost:8000/docs 访问。

CLI

从终端调用任意工具:

uv run cli --target-project ../my-host-project git_quick_upload --message "your commit message"

--target-project 必须放在工具名称之前。不引用宿主项目的工具(例如 get_random_number)可以在不带 --target-project 的情况下调用。

工具目录

通用

工具

签名

描述

create_image

(description: str, file_name: str | None = None) -> str

根据给定的文本描述,使用 Gemini(模型 gemini-3.1-flash-lite-image)生成图像。保存到 resources/images/

describe_image

(image_path: str, description: str) -> str

使用 Gemini 视觉能力(固定模型 gemini-flash-lite-latest)解释目标项目中的图像,供不具备视觉能力的模型使用。image_path 相对于目标项目

debug

() -> str

返回环境调试信息(cwd、路径、环境变量)

get_random_number

(start: int = 1, end: int = 100) -> str

返回 start 与 end 之间的随机数

Git

工具

签名

描述

git_discard_changes

() -> str

丢弃所有未提交的更改并移除未跟踪的文件。恢复到 HEAD

git_pull_submodules

() -> str

将所有子模块更新到最新的远程提交(要求子模块处于干净状态);指针更新保持未提交

git_quick_upload

(message: str) -> str

执行 git pull、git add .、git commit -m <message> 和 git push

Python

工具

签名

描述

python_analyze

() -> str

对工具目录中的所有 *.py 文件应用 python_code_verifier

python_clear

() -> str

移除当前目录下的所有 __pycache__ 目录

python_code_verifier

(files: list[str]) -> str

校验指定文件的 Python 格式规则

C++

工具

签名

描述

cpp_analyze

() -> str

对所有 .cpp/.hpp 文件应用格式化修复,然后运行 cppcheck 静态分析

cpp_code_verifier

(files: list[str]) -> str

校验指定文件的 C++ 格式规则

cpp_compile

() -> str

使用 Clang 并行编译整个 C++ 项目

cpp_create_class

(class_hierarchy: str, include_list: list[str] = [], using_list: list[str] = [], create_header_only: bool = False) -> str

根据层级字符串(例如 "game/player")生成一个新的 C++ 类

cpp_create_test

(hierarchy: str, flg_adhoc: bool = False, include_list: list[str] = []) -> str

生成一个 C++ 测试文件

cpp_analyze_include_tree

(file_path: str = None) -> str

显示 C++ 文件的递归 include 依赖树。默认使用项目主文件

cpp_generate_opengl_html

() -> str

生成 opengl.htm,即 OpenGL 4.6 核心模式的单文件 HTML 树状视图。从目标项目读取 include/glad/snake_case.hpp,将官方 Khronos refpages 获取到 /tmp/generate-opengl-html,并将输出写入目标项目根目录

会话

工具

签名

描述

session_context_usage

(session_id: str | None = None, context_limit: int | None = None) -> str

报告当前 opencode 聊天会话正在使用多少模型上下文窗口(context_used、context_percent、模型上限)。直接读取 opencode 数据库;自动检测目标项目中的活动会话。参见 opencode 知识库

项目结构

project-mcp-tools/
├── main.py                    # Entry point — builds tool_manager, starts servers
├── pyproject.toml             # Project config, dependencies, entry points
├── tools/                     # Core engine package
│   ├── __init__.py
│   ├── tool_manager.py        # Core orchestrator — shared registry, tool folder loading, subprocess dispatch, CLI/API/MCP exposure
│   ├── tool.py                # @tool() decorator, ToolInfo/ParameterInfo models, response contract helpers
│   ├── path_manager.py        # Project/target root resolution — injectable, no global state
│   └── folder_scanner.py      # Auto-discovers @tool-decorated functions in directories
├── general/                    # General-purpose tools (no host project dependency)
│   ├── create_image.py         # Gemini image generation tool
│   ├── describe_image.py       # Gemini image interpretation tool
│   ├── debug.py                # Environment debugging tool
│   └── get_random_number.py    # Random number generator
├── sak/
│   ├── common.py              # Utilities (process creation, JSON, assertions)
│   └── fso/                   # File system objects
├── lib/
│   ├── base_verifier.py       # Abstract regex-based code formatter
│   ├── project_config.py      # Global project configuration
│   ├── project_file.py        # Abstract source file with license header management
│   └── template.py            # Jinja-like template engine with imports and lists
├── cpp/
│   ├── analyze.py             # C++ full analysis tool
│   ├── code_verifier.py       # C++ formatting verification tool
│   ├── compile.py             # C++ parallel compilation tool
│   ├── create_class.py        # C++ class scaffolding tool
│   ├── create_test.py         # C++ test scaffolding tool
│   ├── include_tree.py        # C++ include dependency tree tool
│   └── cpp_lib/               # C++ domain library (compiler, model, verifier, build)
├── python/
│   ├── analyze.py             # Python full analysis tool
│   ├── code_verifier.py       # Python formatting verification tool
│   └── python_lib/            # Python domain library (model, verifier, config)
├── session/
│   ├── context_usage.py       # opencode session context usage tool
│   └── session_lib/           # Session domain library (opencode database reader)
├── git/
│   ├── discard_changes.py     # Git reset + clean tool
│   └── quick_upload.py        # Git pull/add/commit/push tool
├── resources/
│   └── images/               # Generated images (from create_image tool)
├── .agents/
│   └── skills/               # AI assistant skills (compliance audit, uv package manager)
└── docs/
    ├── templates/             # Template files for class/test scaffolding (user zone)
    ├── example/               # Usage examples (e.g. google-genai.py) (user zone)
    └── agent/                 # AI-managed knowledge base (architecture, guides, workflows, status)
        ├── architecture.md    # System architecture and design decisions
        ├── development/       # Tool development guide
        ├── style-guide/       # Coding style guides
        ├── workflow/          # Workflow documentation
        └── status.md          # Agent task status

架构

系统围绕一个核心的 tool_manager 对象构建,该对象持有共享工具注册表,并处理全部三种传输方式(CLI、REST API 和 MCP)。

有关系统架构、设计决策和目标项目机制的详细说明,请参阅 系统架构 指南。

添加新工具

要添加新工具,请在现有工具文件夹(或新文件夹)中创建一个 Python 文件,并用 @tool() 装饰你的函数。

有关工具层和领域库结构的分步教程与指南,请参阅 工具开发指南。

配置

全局配置和领域特定配置集中在代码库中。有关配置键和值的完整列表,请参阅 系统架构 - 集中式配置。

编码规范

本项目中的所有代码都必须遵守严格的指南,包括所有标识符一律使用 snake_case,以及特定的空格规则。有关完整的指南,请参阅 Python 风格指南。

许可证

GNU General Public License v3.0——详情请参阅源文件中的许可证头。

Available Tools

12 tools
create_aliasesA

creates convenience symlinks for invoking project-mcp-tools tools via CLI

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals that symlinks are created, but does not state where they are placed, whether existing symlinks are overwritten, what side effects may occur, or whether the operation is reversible.

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 immediately communicates the tool's core function without any filler or repetition. It is appropriately concise for a zero-parameter tool.

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

Completeness3/5

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

Given the tool's simplicity and zero parameters, the description covers the essential purpose. However, because there are no annotations, more context about side effects and the intended environment would make it more complete for an agent deciding whether and how to invoke it.

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

Parameters4/5

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

The tool takes zero parameters and the schema coverage is trivially 100%, so there are no parameter semantics to clarify. The description correctly focuses on the tool's purpose rather than parameter details.

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 states a specific verb ('creates') and resource ('convenience symlinks for invoking project-mcp-tools tools via CLI'), making the tool's function immediately clear. It is clearly distinguished from sibling tools like create_image or git_quick_upload, which serve entirely different purposes.

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

Usage Guidelines3/5

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

The description implies the use case: run this tool when you want CLI-based invocation of project-mcp-tools tools. However, it does not explicitly state when to use it versus alternatives, mention prerequisites, or note whether it should be run once or repeatedly.

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

create_imageB

generates an image using Gemini from the given text description. do NOT include a file extension in file_name

ParametersJSON Schema
NameRequiredDescriptionDefault
file_nameNo
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries full responsibility for disclosing behavior. It reveals that the tool generates an image and adds a useful file_name constraint, but it does not disclose side effects, output behavior, failure modes, latency, or any requirements around the generated file. The description adds some value but is thin on behavioral context.

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

Conciseness5/5

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

The description is very short, front-loaded with the core action, and every sentence earns its place. The critical file-extension gotcha is given separately and clearly. There is no fluff or redundancy.

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

Completeness3/5

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

For a two-parameter tool with an output schema, the description is minimally adequate: it names the input and flags a key constraint. But it leaves gaps around optional file_name behavior, what the tool returns, and any operational context. An agent could likely call it correctly, but not with full understanding.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that description is a text prompt and adds a meaningful file_name constraint: do not include an extension. However, it does not explain what happens when file_name is null/default, naming conventions, or why the extension must be omitted.

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 a specific verb/resource: 'generates an image using Gemini from the given text description.' It distinguishes implicitly from sibling describe_image by being the creation counterpart. However, it does not explicitly differentiate itself or mention what the generated image output is beyond the act of generation.

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 about when to use this tool versus alternatives or when not to use it. The only instruction is the file-extension rule, which is a parameter-level constraint, not usage context. Sibling tools like describe_image are not mentioned, leaving selection entirely to inference.

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

debugA

returns environment debugging information (cwd, paths, env vars)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. 'Returns... information' indicates a read-only, side-effect-free operation, and the parenthetical enumerates the exact categories of data returned. This is clear and complete for a diagnostic tool.

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 one short sentence that front-loads the core behavior and uses a parenthetical to give concrete examples without adding fluff. Every word earns its place.

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

Completeness5/5

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

For a zero-parameter tool with an output schema present, the description gives enough context to select and invoke it correctly. The return categories are named, and no additional prerequisites or side effects are relevant.

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

Parameters4/5

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

The tool has zero parameters and the schema coverage is 100%, so there is nothing for the description to add about parameters. The baseline of 4 applies here.

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 states a specific action ('returns environment debugging information') and names concrete contents (cwd, paths, env vars), so an agent knows exactly what this tool does. This clearly separates it from the unrelated sibling tools.

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

Usage Guidelines4/5

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

The phrase 'environment debugging information' provides a clear context: use this when needing to inspect the execution environment. It does not name exclusions or alternatives, but none of the sibling tools address this purpose, so the context is sufficient.

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

describe_imageA

uses the Gemini vision model to interpret an image from the target project for models without vision capability image_path is the relative path of the image inside the target project description explains what the requesting model wants to know about the image the answer is based only on what is visible in the image

ParametersJSON Schema
NameRequiredDescriptionDefault
image_pathYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It usefully states that the answer is based only on what is visible in the image, and the read-only nature is implied by 'interpret'. However, it does not mention potential side effects, external API dependencies, error behavior, or permission requirements.

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?

Every sentence earns its place: the main purpose, the two parameter definitions, and the behavioral constraint that the answer depends only on visible content. It is front-loaded with the primary purpose and contains no filler.

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

Completeness4/5

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

Given that an output schema exists, return values need no explanation. The description covers the tool's purpose, parameters, and a key behavioral boundary. Minor gaps include handling of invalid image paths and any limitations of the vision model, but the essential information for calling the tool is present.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by explaining both parameters: 'image_path is the relative path of the image inside the target project' and 'description explains what the requesting model wants to know about the image'. This adds meaning beyond the bare schema definitions.

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

Purpose4/5

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

The description clearly states the tool interprets an image using the Gemini vision model, specifying both the verb (interpret) and the resource (image from the target project). It does not explicitly compare itself to sibling tools like create_image, but the purpose is specific enough that an agent can tell what the tool does.

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

Usage Guidelines4/5

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

The phrase 'for models without vision capability' gives a clear context for when this tool should be used. It does not explicitly mention alternatives or when not to use it, but the intended scenario is clearly communicated.

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

get_random_numberA

returns a random number between start and end

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It accurately communicates the core behavior (randomness and a range), but it does not clarify whether the endpoints are inclusive, whether the result is an integer or float (apart from any output schema), or what happens if 'start' exceeds 'end'.

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 with no wasted words. It delivers the essential action and the two key parameters immediately.

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

Completeness4/5

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

For a simple stateless utility, the combination of description and schema is sufficient for normal invocation. An output schema exists to document the return value, and the only notable gap is edge-case behavior around endpoint inclusivity and 'start'/'end' ordering, which is minor at this complexity level.

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 no descriptions for either parameter, so the description must add meaning. It does: 'start' and 'end' clearly define the inclusive?—at minimum, boundary—range endpoints. Defaults are already visible in the schema, so the description need not repeat 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 states a specific verb ('returns') and a clear resource: a random number bounded by 'start' and 'end'. No sibling tool appears related to random generation, so the tool's identity is unambiguous and it is easily distinguished from its siblings.

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

Usage Guidelines3/5

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

The intended use is implied: call this tool when a random number in a given range is needed. However, the description provides no explicit guidance about when not to use it or which alternative to prefer, and no exclusions or prerequisites are stated.

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

git_discard_changesA

discards all uncommitted changes and removes untracked files this tool reverts the repository to the state of the last commit (head)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It clearly states the destructive side effects: discarding all uncommitted changes, removing untracked files, and restoring the repository to HEAD. It does not explicitly warn about irreversibility, but 'discards' and 'removes' strongly imply data loss.

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

Conciseness5/5

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

Two short sentences deliver the full behavior with no filler. The destructive action is front-loaded, and the explicit 'all' and 'HEAD' qualifiers add useful precision without bloat.

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

Completeness5/5

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

For a zero-parameter destructive tool, the description fully specifies what changes are discarded, that untracked files are also removed, and the exact target state. An output schema exists, so return-value details are covered elsewhere.

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

Parameters4/5

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

The tool has zero parameters, so schema description coverage is effectively 100% and no parameter-level documentation is needed. This matches the baseline for parameterless tools.

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 and resource: it discards all uncommitted changes, removes untracked files, and reverts to HEAD. This is unambiguous and distinguishes the tool from sibling upload/pull operations.

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

Usage Guidelines4/5

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

The description gives clear context for when the tool is appropriate: whenever the goal is to abandon all uncommitted work and clean untracked files. It does not explicitly compare against alternatives or provide when-not-to-use guidance, but the intended use case is unambiguous.

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

git_pull_submodulesA

updates every submodule of the target project to the latest commit of its remote branch each submodule must have a clean git status, otherwise the tool fails without touching anything the updated pointers are left in the working tree so the owner decides when to commit the bump

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond the bare action by disclosing key behaviors: the tool fails without touching anything if any submodule has a dirty status, and it leaves updated pointers in the working tree rather than committing. These side effects and failure semantics are valuable for an agent with no annotations to rely on.

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 three concise sentences, front-loaded with the main action, followed by precondition and outcome. Every sentence adds useful information with no redundancy or filler.

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

Completeness5/5

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

For a parameterless tool, the description is complete: it explains what happens, the failure condition, and the resulting working-tree state. The presence of an output schema means it does not need to describe return values, and no other critical context is missing.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies here because no parameter documentation is needed.

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 updates every submodule of the target project to the latest commit of its remote branch. It uses a specific verb, identifies the resource, and describes the outcome, making its purpose obvious even without schema details.

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

Usage Guidelines3/5

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

The usage context is implied: use this tool when you want to update all submodules to their latest remote commits. It also provides an important precondition (clean git status), but it does not explicitly discuss alternatives or when-not-to-use conditions beyond the clean-status requirement.

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

git_quick_uploadA

performs a quick git upload: pull, add all, commit with message, and push this tool is intended for simple, non-conflicting changes to increase agility inspect git status and git diff directly to produce the commit message using the Conventional Commits standard (do not use git log; history must not influence the commit message decision, only status and diff) mandatory: the message must be in en-us

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

The description discloses the main operation sequence and the commit-message decision process (use git status/diff, not git log). However, with no annotations, it does not mention risks such as 'add all' staging unintended changes or how pull conflicts are handled.

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?

Every sentence earns its place: the workflow is front-loaded, followed by intended usage, commit-message guidance, and a mandatory language constraint. There is no redundant filler.

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

Completeness4/5

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

The definition covers the operation, intended use, commit message rules, and language requirement. It could be more complete about failure modes and side effects of staging all changes, but the scope is simple and the output schema is present.

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

Parameters5/5

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

The schema only shows a generic 'message' string with 0% coverage, but the description fully compensates: it is the commit message, must follow Conventional Commits, must be derived from git status/diff, and must be in en-us.

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 opens with a concrete workflow: 'pull, add all, commit with message, and push.' This clearly identifies the tool's action and resource, distinguishing it from siblings like git_pull_submodules and git_discard_changes.

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?

It explicitly states the intended context: 'intended for simple, non-conflicting changes to increase agility.' It does not name alternative tools or exclusions, but the intended-use context is clear enough for an agent to decide when to invoke it.

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

keyboard_notes_converterA

converts user keyboard note transcriptions into json note arrays for game audio parses shorthand key notation into standard note and duration pairs

notation rules: asdfghjk maps to c4, d4, e4, f4, g4, a4, b4, c5 uppercase letters represent 1 beat quarter notes lowercase letters represent 0.5 beat eighth notes enclosing in () represents 4 beats whole notes enclosing in [] represents 2 beats half notes enclosing in _ represents 0.25 beat sixteenth notes +1 or -1 at start of line adjusts base octave

ParametersJSON Schema
NameRequiredDescriptionDefault
input_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it delivers: it discloses the complete conversion grammar, including key-to-note mapping, case-based durations, enclosure-based durations, and octave adjustment. This gives an agent an accurate behavioral model of the transformation without needing to infer anything beyond the description.

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 appropriately sized and well structured: a high-level purpose sentence, a parsing summary, and a compact notation rule list. Each line earns its place and the most important usage details are front-loaded before the formal rules.

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?

Despite the tool's grammar complexity, the description covers all necessary operational rules: allowed letters, note mapping, duration semantics, grouping syntax, and octave shifts. Since an output schema exists, return-value details are not required; the definition is complete enough for an agent to invoke the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, and the input_text parameter has no schema description, but the tool description fully compensates by defining what the input text contains and how it is interpreted. Every notation rule applies directly to the single parameter, so the agent can construct valid input without additional information.

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 states a specific verb ('converts') and resource ('user keyboard note transcriptions') with a clear output ('json note arrays for game audio'). It also explains the parsing function, making the tool's purpose unambiguous and distinguishable from the unrelated sibling tools.

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

Usage Guidelines4/5

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

The description clearly identifies the input scenario — keyboard note transcriptions to game audio note arrays — and the notation rules give the agent enough context to know when the tool is applicable. It does not mention explicit alternatives or exclusions, but none of the sibling tools serve a similar purpose, so this is not a significant gap.

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

list_toolsB

returns a list of available tools

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It only states that it returns a list and never discloses behavioral traits such as whether the list is exhaustive/session-specific, whether any side effects or permissions apply, or how 'available' is determined. The read-only nature is inferable but not explicit.

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

Conciseness5/5

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

The description is one short sentence with no filler: 'returns a list of available tools'. Every word earns its place, and the core purpose is immediately visible.

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 parameterless introspection tool, the description is minimum viable: it states what is returned and the output schema likely covers return structure. However, 'available' is ambiguous and may mean session-scoped, permission-scoped, or platform-wide, and no behavioral or usage context compensates for the lack of annotations.

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

Parameters4/5

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

The tool has zero parameters and the schema correctly declares no properties, so there is no parameter meaning left to explain. Per calibration, a zero-parameter tool receives a baseline of 4.

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?

Provides a clear verb ('returns') and resource ('a list of available tools'), and it is plainly distinct from the sibling operation tools like git_quick_upload or create_image. It does not explain what 'available' means or what fields the list includes, which holds it back from a 5.

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

Usage Guidelines3/5

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

The description implies the tool should be used when an agent needs to know which tools are available, but it gives no explicit when-to-use guidance, no exclusions, and no alternatives. This is adequate for a self-evident metatool, but not generous.

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

python_clearA

removes all pycache directories under the current directory

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states that the tool is destructive ('removes') and specifies exactly what is removed and where. It could add more detail about recursion or irreversibility, but the core behavior is transparent.

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 conveys the action, target, and scope with no wasted words. It is front-loaded and easy to parse.

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

Completeness5/5

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

For a tool with no parameters and an output schema present, the description is complete: it tells the agent what the tool does, what it affects, and where. Nothing essential is missing for correct invocation.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantics to document. The baseline for a zero-parameter tool is 4, and the description appropriately avoids inventing unnecessary parameter detail.

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 states a specific verb ('removes'), a precise target (all __pycache__ directories), and a scope ('under the current directory'). This unambiguously identifies the tool's function and sets it apart from the unrelated sibling tools.

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 does not provide explicit when-to-use guidance, exclusions, or alternatives. While the tool's purpose is obvious from the description, there is no discussion of prerequisites, safety considerations, or situations where it should not be used.

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

session_context_usageA

reports how much of the model context window the current opencode chat session is using reads the last message token usage from the opencode database when session_id is omitted the most recently updated active session in the target project is used context_limit overrides the context limit resolved from the models.dev cache use the returned context_used and context_percent values in conditional instructions

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNo
context_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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 openly states that the tool reads the last message token usage from the opencode database, explains the fallback behavior when session_id is omitted, and discloses that context_limit overrides the models.dev cache value. This is substantial, honest behavioral detail beyond what the name alone implies.

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?

Every sentence earns its place. The description front-loads the core purpose, then adds parameter behavior, override semantics, and usage guidance in a compact, scannable structure. There is no redundant or filler language.

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?

The tool is moderately complex, has no annotations, and an output schema exists but is not shown in the description. The description still covers the operation's source, default behavior, override behavior, and the key returned fields, which is sufficient for correct invocation and interpretation.

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

Parameters5/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 add meaning for both parameters. It does: session_id determines which session is used, with a clear default when omitted; context_limit overrides the resolved context limit. This fully compensates for the bare input schema and gives an agent enough to pass correct values.

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 opens with a specific verb and resource: 'reports how much of the model context window the current opencode chat session is using.' This clearly identifies the tool's function and is distinct from all listed siblings, which are unrelated utilities. The mention of reading token usage from the opencode database further pins down what the tool actually does.

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

Usage Guidelines4/5

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

The description gives clear practical context: session_id behavior when omitted, context_limit overriding the resolved limit, and guidance to use the returned context_used and context_percent values in conditional instructions. It does not explicitly name alternatives or when-not-to-use, but the tool's niche is obvious and no sibling provides a similar context-reporting capability.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedcreate_aliases
    • First observedcreate_image
    • First observeddebug
    • First observeddescribe_image
    • First observedget_random_number
    • First observedgit_discard_changes
    • First observedgit_pull_submodules
    • First observedgit_quick_upload
    • First observedkeyboard_notes_converter
    • First observedlist_tools
    • First observedpython_clear
    • First observedsession_context_usage

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: git operations, image generation/description, context reporting, and one-off converters do not overlap. An agent should not confound any pair of these tools.

Naming Consistency3/5

All names use snake_case, but the pattern is inconsistent: some are verb_noun (create_image, list_tools), some are domain-prefixed (git_quick_upload, python_clear), and some are noun phrases (session_context_usage, keyboard_notes_converter). The names are readable, but future tool names are not predictable.

Tool Count4/5

Twelve tools is a reasonable count and none of the tools feels redundant. The set is a broad utility grab-bag, so it is slightly less tightly scoped than a focused server, but the count itself is appropriate.

Completeness3/5

The git and image sub-areas have practical coverage, and individual utilities are self-contained, but the set has no definable single domain against which to judge completeness. An agent cannot infer what project operations the server supports because the tools are an ad hoc collection rather than a coherent surface.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A universal framework for creating and deploying custom Model Context Protocol (MCP) tool servers with decorator-based tool registration, supporting multiple transports and automatic JSON schema generation for AI assistants.
    1
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    A universal MCP server that automatically discovers and registers CLI tools as AI-powered agents with persona configuration, enabling any CLI tool to be used as an MCP tool.
    4
    1
    MIT