Skip to main content
Glama

project-mcp-tools

단일 공유 도구 레지스트리에서 MCP(Model Context Protocol), REST API, CLI라는 세 가지 프로토콜을 통해 개발자 도구를 동시에 노출하는 Python 프레임워크입니다.

개요

project-mcp-tools는 서로 다른 소비자를 위해 별도의 도구 백엔드를 유지 관리해야 하는 문제를 해결합니다. @tool() 데코레이터를 사용하여 도구를 한 번 작성하면 다음에서 즉시 사용할 수 있습니다:

  • AI 어시스턴트 — MCP 프로토콜(FastMCP 기반)을 통해

  • HTTP 클라이언트 — REST API(FastAPI + uvicorn 기반)를 통해

  • 터미널 사용자 — CLI(argparse 기반)를 통해

번들로 제공되는 도구는 C++ 개발(컴파일, 정적 분석, 포맷팅, 클래스/테스트 스캐폴딩, include 트리 분석), Python 포맷팅 검증, git 작업을 다루며, 모두 서브프로세스 실행을 통한 프로세스 격리를 지원합니다.

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 4.6 코어 프로파일의 단일 파일 HTML 트리 뷰인 opengl.htm을 생성합니다. 대상 프로젝트의 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

아키텍처

이 시스템은 공유 도구 레지스트리를 보유하고 세 가지 전송 방식(CLI, REST API, MCP)을 모두 처리하는 중앙 tool_manager 객체를 중심으로 구축되었습니다.

시스템 아키텍처, 설계 결정, 대상 프로젝트 메커니즘에 대한 자세한 설명은 시스템 아키텍처 가이드를 참조하세요.

새 도구 추가

새 도구를 추가하려면 기존 도구 폴더(또는 새 폴더)에 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