ToolForge MCP
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., "@ToolForge MCPfind a tool that converts markdown to HTML"
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.
ToolForge MCP
ToolForge MCP is a governed registry of reusable Python tools for AI agents. It lets agents search approved tools by intent, run approved tools with JSON input, register newly generated scripts as drafts, and manage tool lifecycle through approval, updates, deprecation, and rollback.
The MVP is MCP-only. It runs over stdio by default and does not include a web UI or HTTP server.
Features
Register Python scripts as draft reusable tools
Approve reviewed tool versions for execution
Search approved tools by semantic-style intent with keyword/tag fallback
Run approved tools through a subprocess JSON contract
Log every run to SQLite
Seed safe default tools on first startup
Update, deprecate, and rollback tool versions
Related MCP server: Tool Box MCP Server
Runtime Paths
By default, ToolForge stores metadata and runtime tool files locally:
data/toolforge.db
tools/Override these paths with:
export TOOLFORGE_DB_PATH=/path/to/toolforge.db
export TOOLFORGE_TOOLS_DIR=/path/to/tools
export TOOLFORGE_WORK_DIR=/path/to/workMCP Server
Run the server with:
uv run toolforge-mcpor:
python3 server.pyConnect MCP Clients
ToolForge MCP is a local stdio MCP server. The MCP client starts the process, then discovers the server instructions and available tools at connection time.
Use absolute paths in client configuration so the server can start from any
working directory. Replace /absolute/path/to/toolforge-mcp with your local
checkout path.
Recommended Setup
Install runtime dependencies before connecting a client:
cd /absolute/path/to/toolforge-mcp
uv sync --extra devThe --extra dev option installs test dependencies and optional libraries used
by the default seed tools, such as PDF and image helpers. Local semantic
embeddings are optional because they pull a larger ML dependency stack. To enable
them, run:
uv sync --extra dev --extra semanticIf you do not use uv, create a Python environment and install the package
dependencies from pyproject.toml.
Codex
Codex reads MCP servers from ~/.codex/config.toml, or from a project-scoped
.codex/config.toml in trusted projects. The Codex CLI and IDE extension share
this configuration.
CLI setup:
codex mcp add toolforge --env TOOLFORGE_DB_PATH=/absolute/path/to/toolforge-mcp/data/toolforge.db --env TOOLFORGE_TOOLS_DIR=/absolute/path/to/toolforge-mcp/tools --env TOOLFORGE_WORK_DIR=/absolute/path/to/toolforge-mcp/work -- uv --directory /absolute/path/to/toolforge-mcp run toolforge-mcpEquivalent ~/.codex/config.toml entry:
[mcp_servers.toolforge]
command = "uv"
args = ["--directory", "/absolute/path/to/toolforge-mcp", "run", "toolforge-mcp"]
startup_timeout_sec = 20
tool_timeout_sec = 120
[mcp_servers.toolforge.env]
TOOLFORGE_DB_PATH = "/absolute/path/to/toolforge-mcp/data/toolforge.db"
TOOLFORGE_TOOLS_DIR = "/absolute/path/to/toolforge-mcp/tools"
TOOLFORGE_WORK_DIR = "/absolute/path/to/toolforge-mcp/work"In the Codex TUI, run /mcp to confirm that toolforge is connected.
Claude Code
Claude Code can add local stdio MCP servers with claude mcp add. The --
separator is important: everything after it is the command used to start the MCP
server.
CLI setup:
claude mcp add \
--env TOOLFORGE_DB_PATH=/absolute/path/to/toolforge-mcp/data/toolforge.db \
--env TOOLFORGE_TOOLS_DIR=/absolute/path/to/toolforge-mcp/tools \
--env TOOLFORGE_WORK_DIR=/absolute/path/to/toolforge-mcp/work \
--transport stdio \
toolforge \
-- uv --directory /absolute/path/to/toolforge-mcp run toolforge-mcpProject-scoped .mcp.json example:
{
"mcpServers": {
"toolforge": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/toolforge-mcp", "run", "toolforge-mcp"],
"env": {
"TOOLFORGE_DB_PATH": "/absolute/path/to/toolforge-mcp/data/toolforge.db",
"TOOLFORGE_TOOLS_DIR": "/absolute/path/to/toolforge-mcp/tools",
"TOOLFORGE_WORK_DIR": "/absolute/path/to/toolforge-mcp/work"
},
"timeout": 120000
}
}
}Inside Claude Code, use /mcp to inspect server status. Project-scoped MCP
servers may require workspace trust approval before they become active.
Cursor
Cursor reads MCP servers from JSON configuration. Use a project-scoped
.cursor/mcp.json when ToolForge should be available only for this repository,
or a user-level MCP configuration when you want it available across projects.
Project-scoped .cursor/mcp.json example:
{
"mcpServers": {
"toolforge": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/toolforge-mcp", "run", "toolforge-mcp"],
"env": {
"TOOLFORGE_DB_PATH": "/absolute/path/to/toolforge-mcp/data/toolforge.db",
"TOOLFORGE_TOOLS_DIR": "/absolute/path/to/toolforge-mcp/tools",
"TOOLFORGE_WORK_DIR": "/absolute/path/to/toolforge-mcp/work"
}
}
}
}After editing Cursor MCP settings, reload Cursor or restart the agent session, then confirm that the ToolForge tools appear in Cursor's MCP/tools panel.
Without uv
If uv is not available, install the project into a virtual environment and use
that environment's Python directly:
cd /absolute/path/to/toolforge-mcp
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -e ".[dev]"
# Optional semantic embeddings:
# python3 -m pip install -e ".[dev,semantic]"Then replace the MCP command with:
{
"command": "/absolute/path/to/toolforge-mcp/.venv/bin/python",
"args": ["/absolute/path/to/toolforge-mcp/server.py"]
}Agent Governance Pack
ToolForge includes copy-ready governance examples for teams that want Codex, Claude Code, and Cursor to consistently reuse MCP tools instead of creating throwaway scripts.
See governance/ for:
Codex
AGENTS.mdguidance andconfig.tomlMCP exampleClaude Code
CLAUDE.mdguidance and.mcp.jsonexampleCursor
.mdcrule and.cursor/mcp.jsonexample
The shared policy is:
Search ToolForge before creating utility scripts.
Run an approved tool when one exists.
Register newly generated reusable utility scripts as draft tools.
Approve tools only after human or authorized workflow review.
Setup Script
Use the setup script to install project-scoped governance and MCP config for Codex, Claude Code, and Cursor. Running the script without arguments prints help and does not write files:
python3 scripts/setup_agent_governance.pyPass explicit options to install governance/config files:
python3 scripts/setup_agent_governance.py \
--agents all \
--target-project /path/to/your/project \
--toolforge-dir /absolute/path/to/toolforge-mcpPreview changes without writing files:
python3 scripts/setup_agent_governance.py --agents all --target-project /path/to/your/project --dry-runConfigure one agent at a time:
python3 scripts/setup_agent_governance.py --agents codex --target-project /path/to/your/project
python3 scripts/setup_agent_governance.py --agents claude --target-project /path/to/your/project
python3 scripts/setup_agent_governance.py --agents cursor --target-project /path/to/your/projectThe script updates managed ToolForge sections idempotently and preserves other MCP servers in JSON config files.
Stored Tool Contract
Stored scripts must:
read one JSON object from stdin
write one JSON object to stdout
exit nonzero on failure
Default Seed Tools
On first startup, ToolForge seeds these approved tools:
validate_json_schemaclean_csv_filegenerate_markdown_reportresize_imageextract_text_from_pdf
The seed operation is idempotent and recorded in SQLite.
License
Apache License 2.0
Available Tools
9 toolsapprove_toolB
Approve a reviewed draft or tested tool version so it becomes available for search and execution. Use this only after a human or authorized approval workflow has confirmed the tool is safe and useful.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| tool_id | Yes | ||
| version | Yes | ||
| approved_by | Yes |
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 alone must disclose behavioral traits. It mentions that the tool makes a version available for search and execution, but does not elaborate on side effects, authorization requirements, reversibility, or any impact on existing versions. This is insufficient for safe usage.
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 consists of two concise, front-loaded sentences that convey the core purpose and usage guidance without any 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?
The tool has 4 parameters with 0% schema coverage, no annotations, and an output schema that is not mentioned. The description only covers the high-level action but fails to explain parameters, expected return value, or any pitfalls, leaving the agent ill-equipped 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 description coverage is 0%, meaning the input schema has no descriptions for parameters. The description adds no explanation for any of the 4 parameters (tool_id, version, approved_by, notes), leaving their semantics entirely to the schema definition. This is a critical gap.
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's action: 'Approve a reviewed draft or tested tool version so it becomes available for search and execution.' It uses a specific verb (approve) and a concrete resource (tool version), and it's distinct from sibling tools like deprecate_tool or register_tool.
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 explicitly says 'Use this only after a human or authorized approval workflow has confirmed the tool is safe and useful,' providing clear context for when to use the tool. However, it does not mention when not to use it or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deprecate_toolA
Mark a ToolForge tool as deprecated so it remains visible for history and audit purposes but is no longer recommended or used by default. Use this when a tool is obsolete, replaced, unsafe for normal use, or no longer preferred.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| tool_id | Yes |
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 full burden. It explains that the tool 'remains visible for history and audit purposes but is no longer recommended or used by default,' but does not mention reversibility, permission requirements, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence defines purpose and consequence; second sentence lists use cases. Information is front-loaded and every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's relative simplicity (2 required params, no enums, no nested objects) and presence of an output schema, the description is fairly complete. It covers purpose, usage scenarios, and behavioral impact. Could add minor details on error conditions or reversal.
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 the two required parameters. It implicitly refers to 'tool_id' and 'reason' in context, but does not clarify expected values, formats, or constraints for 'reason', nor specify if 'tool_id' is an identifier from another tool.
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 ('Mark a ToolForge tool as deprecated') and the resource ('ToolForge tool'), with specific verbs and scope. It distinguishes from sibling tools like 'register_tool' or 'update_tool' by focusing on deprecation.
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 explicitly lists conditions for use: 'when a tool is obsolete, replaced, unsafe for normal use, or no longer preferred.' However, it does not explicitly state when not to use it or suggest alternatives, which would strengthen guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_toolA
Get detailed metadata for a ToolForge tool, including description, tags, lifecycle status, versions, active approved version, checksum, approval state, and usage history. Use this before running, approving, updating, deprecating, or explaining a tool.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | 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 provided, so description carries full burden. It accurately describes the tool as read-only (get metadata) but does not explicitly state it has no side effects or require authentication. Behavior is implied but not fully disclosed.
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 concise sentences with no wasted words. The purpose is front-loaded, and usage context is provided in the second sentence. Ideal structure for quick parsing.
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?
Output schema exists, so return value details are not required. The description covers what metadata is included. However, the parameter is not described, which is a minor gap given only one parameter exists.
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%. The description does not explain the tool_id parameter beyond its name. It lists return fields but fails to clarify the parameter's format or constraints, leaving the agent without necessary guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves detailed metadata for a specific ToolForge tool, listing specific fields (description, tags, lifecycle status, etc.). It distinguishes from siblings like list_tools which likely only list overviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this before running, approving, updating, deprecating, or explaining a tool,' providing clear when-to-use context and differentiating from alternative actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_toolsA
List ToolForge tools with optional filters such as status, tag, language, or name. Use this to browse the registry, inspect available capabilities, or find tools before choosing one to view, approve, update, or run.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| name | No | ||
| status | No | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. States it lists with filters but omits pagination, auth, or read-only nature. Minimal but non-misleading for a browse 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?
Two sentences, no redundancy. Front-loaded with action and key information. Every word serves a purpose.
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 existence of output schema, return value explanation is unneeded. Covers main purpose and usage context. Filters are listed but lack specifics. Differentiates from search_tools well.
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%, so description must add value. Mentions parameter names (status, tag, language, name) but no details on valid values or format. Adds basic mapping but lacks depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists tools with optional filters. Verb 'List' is specific to browsing. Distinguishes from siblings like approve_tool, run_tool by focusing on discovery before actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: to browse registry, inspect capabilities, or find tools before viewing/approving/updating/running. Implicitly excludes these sibling tools for their specific actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_toolB
Register a new reusable Python script as a draft ToolForge tool. Use this when an agent or user has created a useful script that should be saved for review, approval, versioning, and future reuse.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| name | Yes | ||
| tags | Yes | ||
| version | No | 1.0.0 | |
| language | 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 full responsibility for behavioral disclosure. It mentions 'draft' and the tool lifecycle but does not detail what happens upon registration (e.g., immediate visibility, approval required, side effects). It also lacks information on authorization needs or error conditions.
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 concise with two sentences. The first sentence states the primary purpose, and the second provides usage context. It is front-loaded and efficient, though it could be slightly more compact by removing 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?
Given the complexity of 6 parameters (5 required), no annotations, and the existence of an output schema (not explained), the description is incomplete. It does not explain what 'draft' entails, the expected return value, or potential errors. Critical usage context is missing for an agent to use this tool correctly without additional knowledge.
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 implicitly lists parameters (name, description, language, code, tags, version) but does not explain their meaning, format, or constraints. There is a contradiction: the description says 'Python script' but the schema allows any language via a string parameter. This lack of detail and the inconsistency reduce clarity.
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 'register' and the resource 'a new reusable Python script as a draft ToolForge tool'. It distinguishes from sibling tools (e.g., create vs. update/deprecate) by specifying 'new' and 'draft', and outlines the lifecycle purposes (review, approval, versioning, future reuse).
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 explicitly says when to use: when an agent or user has created a useful script that should be saved for review, approval, etc. It implies this is for new scripts, but does not explicitly exclude updating existing tools or mention alternatives like update_tool. Still, it provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_toolA
Restore an earlier approved version of a ToolForge tool as the active version. Use this when a newer approved version is broken, unsafe, or less reliable than a previous approved version.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | Yes | ||
| target_version | 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 must carry the behavioral burden. It indicates a write operation (changing active version) but does not disclose side effects, reversibility, permission requirements, or what happens to the current version. This leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no superfluous words. The first sentence states the action, the second gives usage context. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 required params, no enums) and presence of an output schema, the description covers the core purpose and usage but fails to document parameters and behavioral details. It is minimally complete but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage meaning no parameter descriptions exist. The description does not explain what tool_id or target_version represent, nor the expected format for target_version. This forces the agent to assume or guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'restore' and the resource 'an earlier approved version of a ToolForge tool as the active version'. It distinguishes this tool from siblings like approve_tool and deprecate_tool by specifying it deals with version rollback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit scenarios for use: when a newer approved version is broken, unsafe, or less reliable. It does not explicitly state when not to use or mention alternatives, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_toolA
Execute an approved ToolForge tool with JSON input and return JSON output. Use this when the correct approved tool has been selected and the task should be performed through a governed, logged execution.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | Yes | ||
| input_json | 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 provided, but description mentions 'governed, logged execution' and 'return JSON output', which adds behavioral context. However, does not detail side effects, error handling, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has output schema so return values are covered, but description lacks prerequisites (e.g., tool must be approved) and does not clarify that input_json must match the tool's expected format. Could be more complete for a complex execution tool.
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%, and the description provides no details about the parameters (tool_id and input_json). It only mentions 'JSON input' without explaining what the input should contain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes an approved ToolForge tool, distinguishing it from siblings like register_tool, approve_tool, and list_tools. The verb 'Execute' and resource 'approved ToolForge tool' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when the correct approved tool has been selected and the task should be performed through a governed, logged execution.', providing clear context for when to use it and contrasting with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toolsA
Search approved reusable ToolForge tools by intent, task description, name, tags, or capability. Uses semantic search with keyword and tag fallback. Use this before generating new code when an existing approved tool may already solve the task.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| include_deprecated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions using 'semantic search with keyword and tag fallback,' giving insight into how the search works. However, it does not disclose potential limitations, authentication requirements, or whether the search is readonly. For a search tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Every word adds value. The structure is front-loaded with the purpose, followed by how it works and when to use it. Efficient and clear.
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 there is an output schema (not shown but indicated), the description need not explain return values. The tool has 3 parameters with only 1 required, and the description covers usage context and search method. It is complete enough for an agent to decide when to invoke it, though the missing parameter descriptions slightly lower completeness.
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% (no parameter descriptions in the schema). The description explains that the query parameter can be used to search by 'intent, task description, name, tags, or capability,' but does not mention the 'limit' or 'include_deprecated' parameters. Since the schema provides no descriptions, the description should cover all parameters, but it only partially addresses one.
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's purpose: searching for approved reusable ToolForge tools by multiple criteria (intent, task description, name, tags, or capability). It uses specific verbs ('Search') and a clear resource ('approved reusable ToolForge tools'), distinguishing it from siblings like 'list_tools' (likely just listing) and 'get_tool' (retrieving a specific tool).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use this before generating new code when an existing approved tool may already solve the task.' This tells the agent when to use the tool (before new code generation). However, it does not explicitly mention when not to use it or provide direct alternatives, though the context from sibling tools implies alternatives exist for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_toolA
Create a new draft version of an existing ToolForge tool with updated code and a changelog. Use this when a tool needs a bug fix, improvement, new behavior, or compatibility update without replacing the current approved version immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | Yes | ||
| version | Yes | ||
| new_code | Yes | ||
| changelog | Yes |
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 bears full burden. It discloses that the operation creates a draft and does not replace the current approved version immediately, indicating a non-destructive mutation. However, it does not clarify whether previous drafts are overwritten, permission requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary action, and every word adds value. No redundant or extraneous information.
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 moderate complexity, 0% schema coverage, and no annotations, the description provides the core purpose and usage scenarios but lacks parameter details and deeper behavioral context (e.g., effect on existing drafts). The presence of an output schema partially compensates for return value clarity.
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 description must explain parameters. It only mentions 'updated code' and 'changelog', covering new_code and changelog implicitly. The required parameters tool_id and version are not described at all, leaving the agent to infer from context (tool_id likely identifies the tool, version likely a version string).
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 explicitly states 'Create a new draft version of an existing ToolForge tool with updated code and a changelog', which clearly identifies the verb (create), resource (draft version), and specific actions (updated code, changelog). It distinguishes from siblings like approve_tool and register_tool by emphasizing 'draft' and 'without replacing the current approved version'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit scenarios: 'when a tool needs a bug fix, improvement, new behavior, or compatibility update'. It also implies exclusivity by stating 'without replacing the current approved version immediately', but does not explicitly list when not to use or name alternative tools like rollback_tool.
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.
9 tool updates
v0.1.0- First observed
approve_tool - First observed
deprecate_tool - First observed
get_tool - First observed
list_tools - First observed
register_tool - First observed
rollback_tool - First observed
run_tool - First observed
search_tools - First observed
update_tool
TDQS
Each tool has a clear, distinct purpose covering the full tool lifecycle: registering, viewing, listing, searching, running, approving, deprecating, updating, and rolling back. No two tools have overlapping responsibilities.
All tools follow a verb_noun pattern (e.g., approve_tool, get_tool), though there is a minor inconsistency between singular 'tool' and plural 'tools' in names like list_tools and search_tools vs others.
9 tools is well-scoped for a tool registry server, covering all necessary operations without unnecessary bloat. Each tool serves a distinct and necessary function.
The tool surface covers the core lifecycle: registration, update, approval, execution, deprecation, and rollback. Minor gaps exist, such as the absence of a reject or unapprove operation, but overall it is fairly complete.
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
- SkilderOAuthai.skilder
One place to build, share, and govern the skills and tools your AI agents use at work.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
Register, deploy, review, and govern internal applications built with coding agents.
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceBridges AI agents with tools on IBM watsonx governed agentic catalog, enabling secure governance and tool invocation via the Model Context Protocol.1Apache 2.0- FlicenseAqualityDmaintenanceCentral registry for AI tools with vector search and knowledge graph, enabling intelligent tool discovery, chaining, and execution via MCP.12-
- FlicenseNot gradedqualityBmaintenanceCentralized registry for MCP tools, resources, and prompt templates with JSON schema validation and role-based access control filtering.-
- FlicenseAqualityBmaintenanceA Python framework that exposes developer tools through MCP, REST API, and CLI from a single shared registry, enabling AI assistants, HTTP clients, and terminal users to access the same tools.12-
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/ThisIsCKM-org/toolforge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server