project-mcp-tools
This server exposes MCP tools for git management, Python cleanup, image generation/description, session context monitoring, debugging, random numbers, aliases, and keyboard-note conversion.
Git: upload changes with a commit message, pull/update submodules, discard all uncommitted changes
Python: remove
__pycache__directoriesSession monitoring: report opencode context usage, optionally specifying session ID or context limit
Image tools: generate an image from a text description and describe an image in the target project
Utilities: list available tools, create CLI aliases, debug environment info, generate random numbers
Keyboard notes: convert shorthand keyboard transcriptions into JSON note arrays for game audio
Provides C++ development tools including parallel compilation with Clang, static analysis with cppcheck, code formatting verification, class and test scaffolding, and include dependency tree analysis.
Provides git operations including quick upload (pull, add, commit, push), discarding uncommitted changes and untracked files, and updating submodules to the latest remote commits.
Provides image generation and interpretation using Google's Gemini models, allowing creation of images from text descriptions and analysis of existing images.
Provides Python code analysis and formatting verification tools to check Python files against formatting rules and clean up cache directories.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@project-mcp-toolsCompile the C++ project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
project-mcp-tools
A Python framework that exposes developer tools simultaneously through three protocols: MCP (Model Context Protocol), REST API, and CLI — all from a single, shared tool registry.
Overview
project-mcp-tools solves the problem of maintaining separate tool backends for different consumers. Write a tool once using the @tool() decorator, and it becomes instantly available to:
AI assistants via the MCP protocol (powered by FastMCP)
HTTP clients via a REST API (powered by FastAPI + uvicorn)
Terminal users via a CLI (powered by argparse)
The bundled tools cover C++ development (compile, static analysis, formatting, class/test scaffolding, include tree analysis), Python formatting verification, and git operations — all with process isolation through subprocess execution.
Related MCP server: Agent Factory MCP
Installation
Requirements: Python 3.14+, uv package manager
# Clone the repository
git clone <repository-url>
cd project-mcp-tools
# Install dependencies
uv syncUsage
MCP Server
Starts a FastMCP server that AI assistants can connect to:
uv run mcp-serverConfigure your MCP client to use this server. For example, in opencode.json at the root of the host project (the project you want the tools to operate on, not the project-mcp-tools directory itself):
{
"mcp": {
"project-mcp-tools": {
"type": "local",
"command": ["uv", "--directory", "project-mcp-tools", "run", "mcp-server", "--target-project", "../my-host-project"]
}
}
}Important:
--directorytellsuvwhere to find theproject-mcp-toolspackage (pyproject.toml, dependencies, venv).--target-projectsets the working directory for the MCP process and all its subprocesses — this is the project the tools will actually operate on. The path is resolved relative toproject-mcp-tools/(sinceuv --directorychanges the working directory). Without this separation, git/cpp/python tools would operate insideproject-mcp-tools/instead of your host project.
REST API Server
Starts a FastAPI server on http://0.0.0.0:8000:
uv run api --target-project ../my-host-projectEach tool is exposed as POST /tools/<tool_name>. Query parameters from the tool's function signature become fields in the JSON request body.
Example request:
curl -X POST http://localhost:8000/tools/git_quick_upload \
-H "Content-Type: application/json" \
-d '{"message": "my commit"}'Swagger UI is available at http://localhost:8000/docs.
CLI
Invoke any tool from the terminal:
uv run cli --target-project ../my-host-project git_quick_upload --message "your commit message"--target-project must come before the tool name. Tools that don't reference the host project (e.g., get_random_number) can be called without --target-project.
Tool Catalog
General
Tool | Signature | Description |
|
| Generates an image using Gemini (model |
|
| Interprets an image from the target project using Gemini vision (fixed model |
|
| Returns environment debugging information (cwd, paths, env vars) |
|
| Returns a random number between start and end |
Git
Tool | Signature | Description |
|
| Discards all uncommitted changes and removes untracked files. Reverts to HEAD |
|
| Updates every submodule to the latest remote commit (requires clean submodules); the pointer bump is left uncommitted |
|
| Performs |
Python
Tool | Signature | Description |
|
| Applies |
|
| Removes all |
|
| Verifies Python formatting rules for specified files |
C++
Tool | Signature | Description |
|
| Applies formatting fixes on all |
|
| Verifies C++ formatting rules for specified files |
|
| Compiles the entire C++ project in parallel using Clang |
|
| Scaffolds a new C++ class from a hierarchy string (e.g., |
|
| Scaffolds a C++ test file |
|
| Displays the recursive include dependency tree of a C++ file. Defaults to the project main file |
|
| Generates |
Session
Tool | Signature | Description |
|
| Reports how much of the model context window the current opencode chat session is using ( |
Project Structure
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, status)
├── architecture.md # System architecture and design decisions
├── development/ # Tool development guide
├── style-guide/ # Coding style guides
└── status.md # Agent task statusArchitecture
The system is built around a central tool_manager object that holds the shared tool registry and handles all three transports (CLI, REST API, and MCP).
For a detailed breakdown of the system architecture, design decisions, and target project mechanism, see the System Architecture guide.
Adding a New Tool
To add a new tool, create a Python file in an existing tool folder (or a new one) and decorate your function with @tool().
For a step-by-step tutorial and guidelines on structuring the tool layer and domain libraries, see the Tool Development Guide.
Configuration
Global and domain-specific configurations are centralized in the codebase. For a complete list of configuration keys and values, see System Architecture - Centralized Configuration.
Coding Conventions
All code in this project must adhere to strict guidelines, including the exclusive use of snake_case for all identifiers and specific spacing rules. For the complete set of guidelines, see the Python Style Guide.
License
GNU General Public License v3.0 — see the license headers in source files for details.
Available Tools
12 toolscreate_aliasesA
creates convenience symlinks for invoking project-mcp-tools tools via CLI
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| file_name | No | ||
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | ||
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| start | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| input_text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| context_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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. Dates show when Glama detected each change.
12 tool updates
v0.1.0- First observed
create_aliases - First observed
create_image - First observed
debug - First observed
describe_image - First observed
get_random_number - First observed
git_discard_changes - First observed
git_pull_submodules - First observed
git_quick_upload - First observed
keyboard_notes_converter - First observed
list_tools - First observed
python_clear - First observed
session_context_usage
TDQS
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.
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.
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.
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
327 dev tools via REST API and MCP. Generate Dockerfiles, schemas, K8s, APIs, and more.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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.1MIT
- AlicenseBqualityFmaintenanceA 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.41MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes a suite of developer tools and apps via a shared tool registry, enabling agents to list and call tools through the MCP protocol.MIT
- AlicenseNot gradedqualityCmaintenanceA Python framework for building MCP servers, clients, and apps to connect LLMs to tools and data.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/maxwellaguiarsilva/project-mcp-tools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server