forge-mcp
Forge MCP is a prototype MCP server that exposes Amigo Agent Forge operations to coding agents.
Manage org credentials: add, remove, list, set active/session org, validate credentials via sign-in, and bootstrap with environment variables.
Perform full entity CRUD for supported types: agents, context graphs, services, tools, personas, dynamic behavior sets, metrics, unit tests, unit test sets, and user dimensions.
Use dedicated creation/update tools for domain entities (e.g., forge_agent_create, forge_context_graph_create, forge_service_create, forge_unit_test_create) with type-specific version schemas.
Run conversation testing: single-turn smoke tests, multi-turn simulations, inspect conversation insights (state transitions, triggered behaviors), and run on-demand metric evaluations.
Manage version sets: list, upsert/pin latest or specific versions, promote between sets (e.g., preview → release), and rollback agent or context graph entities to previous versions.
Expose MCP resources for Agent Forge guidance (
amigo://instructions) and entity dependency ordering (amigo://dependency-order).
Click on "Deploy 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., "@forge-mcplist my entity configurations"
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.
This package gives coding agents access to current Amigo Agent Forge operations: managing org credentials, reading and mutating entity configurations, running conversation tests, and working with version sets from Claude Code, Codex, Cursor, and other MCP clients.
Prototype status
@amigo-ai/forge-toolsis an experimental product under active development. Expect rough edges, changing tool contracts, and a faster-moving surface than a locked production SDK. Use it for evaluation and early workflows, not as a long-term stability guarantee.
Prototype Context
Forge MCP is the agent-facing bridge for current Agent Forge workflows. It is useful when a coding agent needs an MCP surface for org switching, entity CRUD, conversation simulation, and version-set operations.
For direct typed application integrations against the Platform API, use @amigo-ai/platform-sdk.
Related MCP server: @restforge-dev/mcp-server
Documentation
Need | Best entry point |
Product and platform docs | |
Prototype repo issues and feedback | |
Contributor guidance | |
Security reporting |
Installation
Requires Node.js 18 or newer; development and CI use Node.js 22. This prototype uses Classic API organization credentials at api.amigo.ai; Platform workspace keys are not interchangeable. Start with a designated test organization because its tools can create, update, and delete configuration.
Add the server to your MCP configuration.
Via npm
{
"mcpServers": {
"forge": {
"command": "npx",
"args": ["-y", "@amigo-ai/forge-tools"]
}
}
}From GitHub
{
"mcpServers": {
"forge": {
"command": "npx",
"args": ["-y", "github:amigo-ai/forge-mcp"]
}
}
}From a local clone
git clone https://github.com/amigo-ai/forge-mcp.git
cd forge-mcp
npm ci
npm run build{
"mcpServers": {
"forge": {
"command": "node",
"args": ["/absolute/path/to/forge-mcp/dist/index.js"]
}
}
}Credentials
Credentials are stored per org in ~/.amigo/credentials/{org_id}.json.
Recommended flow
Start the server without environment variables, then ask your coding agent to add org credentials:
Use forge_add_org to add credentials for org "acme"
Use forge_add_org to add credentials for org "acme-staging"The tool validates credentials by signing in before saving them.
Bootstrap with environment variables
You can bootstrap one org on startup:
{
"mcpServers": {
"forge": {
"command": "npx",
"args": ["-y", "@amigo-ai/forge-tools"],
"env": {
"AMIGO_ORG_ID": "your-org",
"AMIGO_API_KEY": "your-api-key",
"AMIGO_API_KEY_ID": "your-api-key-id",
"AMIGO_USER_ID": "your-user-id"
}
}
}
}What your agent can do
Add, remove, list, and switch active org credentials
Create, update, read, list, and delete Agent Forge entity types
Run smoke tests and multi-turn simulations
Inspect conversation insights and evaluations
Manage version sets and rollbacks
Multi-org support
All tools accept an optional org_id. Resolution order is:
Explicit
org_idon the tool callSession org set by
forge_set_orgDefault org in
~/.amigo/config.json
Tool catalog
Org management
Tool | Description |
| Set the active org for the session |
| List configured orgs with auth status |
| Add or update credentials for an org |
| Remove stored credentials |
Entity CRUD
Tool | Description |
| List entities of a type |
| Get full entity details |
| Create a new entity |
| Update an entity |
| Delete an entity |
Supported entity types: agent, context_graph, service, dynamic_behavior_set, tool, persona, scenario, metric, unit_test, unit_test_set, user_dimension
Conversation testing
Tool | Description |
| Quick single-turn test against a service |
| Multi-turn automated simulation |
| Inspect state transitions and memory |
| Run on-demand metric evaluation |
Version management
Tool | Description |
| List version sets for a service |
| Create or update a version set |
| Promote one version set to another |
| Roll back an entity to a previous version |
MCP Resources
amigo://instructionsfor Agent Forge guidanceamigo://dependency-orderfor entity dependency ordering
Environment Variables
All variables are optional and only apply to startup bootstrap:
Variable | Description |
| Org to bootstrap and set as session default |
| API key for the bootstrapped org |
| API key identifier |
| User ID |
| API base URL. Defaults to |
| Log verbosity: |
Development
npm ci
npm run build
npm run lint
npm testAvailable Tools
37 toolsforge_add_orgA
Add or update credentials for an org. Validates the credentials by signing in.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | The org ID | |
| api_key | Yes | The API key | |
| user_id | Yes | The user ID | |
| api_key_id | Yes | The API key ID | |
| api_base_url | No | The API base URL (default: https://api.amigo.ai) | |
| set_as_default | No | Set this org as the default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behaviors. It states that credentials are validated by signing in (a side effect), but omits details like whether existing credentials are overwritten or merged, failure behavior, or required permissions. Limited transparency.
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 of 11 words, front-loading the core action and validation step. No redundant or filler content.
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?
With 6 parameters, no output schema, and no annotations, the description lacks details on return values (e.g., success/failure indicators), side effects (e.g., sign-in token handling), and prerequisites. The assertion that it 'validates by signing in' is vague and incomplete.
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?
All parameters have descriptions in the schema (100% coverage), so the description adds no new semantic value. The description does not elaborate on parameter meanings beyond what the schema provides.
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 uses a specific verb ('Add or update') and resource ('credentials for an org'), clearly distinguishing from siblings like forge_remove_org and forge_list_orgs. It also mentions validation by signing in, which adds specificity.
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 is used for adding or updating credentials but does not explicitly state when to use it over alternatives like forging a new org or setting a default. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_agent_createC
Create a new agent.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| agent_name | Yes | Name for the agent |
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 only says 'Create a new agent,' omitting important traits like side effects, authorization needs, idempotency, or what happens on creation.
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?
Though composed of a single sentence, it is under-specified and fails to earn its place by providing insufficient information. True conciseness would pack more useful context into few 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?
Given the tool's 2 parameters, no output schema, no annotations, and many siblings, the description is severely incomplete. It does not explain return values, prerequisites, or how it differs from related tools.
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 100%, so the baseline is 3 per guidelines. The description adds no additional meaning beyond the parameter descriptions in the schema.
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 the verb 'Create' and the resource 'agent', making the purpose clear. However, it does not differentiate from many sibling create tools (e.g., forge_entity_create, forge_persona_create) beyond the name, leaving the agent unsure of what an 'agent' specifically is.
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 given on when to use this tool versus alternatives like forge_agent_update or other create tools. There is no mention of prerequisites, conditions, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_agent_updateA
Update an agent by creating a new version. The initial version requires: initials, identity, background, behaviors, and communication_patterns. Subsequent versions can include only changed fields. Do NOT include agent_name, greeting, dynamic_behavior_set_ids, user_dimension_ids, or persona_ids.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| agent_id | Yes | The agent ID to update | |
| identity | No | Agent identity. Required for initial version. | |
| initials | No | Agent initials (e.g., 'MA'). Required for initial version. | |
| behaviors | No | Agent behaviors. Required for initial version. | |
| background | No | Agent background and experience. Required for initial version. | |
| voice_config | No | Voice config. Omit to use the default voice on initial version, or to keep existing voice on updates. | |
| communication_patterns | No | Communication style patterns. Required for initial version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the versioning behavior and required fields for initial updates, but does not disclose side effects, permissions, or error handling.
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 sentences, front-loaded with the main action, and contains no unnecessary words. It efficiently conveys key usage 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?
Given the tool's complexity with 8 parameters and nested objects, the description covers the essential behavior (versioning, initial vs subsequent, forbidden fields). It does not explain return values, but no output schema exists, and the description is adequate 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?
Schema coverage is 100%, so baseline is 3. The description adds context by specifying which parameters are required for initial version and which fields to omit, enhancing understanding beyond the schema.
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 an agent by creating a new version, differentiating from creation and specifying initial version requirements. It provides a specific verb and resource, and distinguishes from sibling tools like forge_agent_create.
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 when-to-use guidance by distinguishing initial vs subsequent version requirements and listing fields to avoid. However, it does not explicitly compare to alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_context_graph_createB
Create a new context graph (state machine that defines conversation flow).
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| state_machine_name | Yes | Name for the context graph |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states creation without disclosing behavioral traits like permissions, reversibility, or side effects. The description carries full burden but is minimal.
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?
Single sentence, front-loaded with key information, no 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?
No output schema or behavioral details; for a creation tool, return value and constraints are missing, leaving the description incomplete.
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 covers 100% of parameters, so description adds no extra meaning; baseline 3 is appropriate.
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 the tool creates a new context graph and defines it as a state machine for conversation flow, distinguishing it from update 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?
No guidance on when to use this tool versus alternatives, no prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_context_graph_updateB
Update a context graph by creating a new version. All fields are required. The terminal state must have exactly one action.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| states | Yes | Array of state definitions (action, decision, recall, annotation, reflection, or tool-call) | |
| references | No | References to other state machines: { ref_name: [machine_id, version] } | |
| description | Yes | Description of the conversation flow | |
| terminal_state | Yes | Name of the terminal state (must have exactly one action, alphanumeric and underscores only) | |
| context_graph_id | Yes | The context graph ID to update | |
| new_user_initial_state | Yes | State name for new users (must be an action state, alphanumeric and underscores only) | |
| global_action_guidelines | Yes | Action guidelines applied to all states | |
| global_boundary_constraints | Yes | Boundary constraints applied to all states | |
| returning_user_initial_state | Yes | State name for returning users (must be an action state, alphanumeric and underscores only) | |
| global_intra_state_navigation_guidelines | Yes | Navigation guidelines applied to all states |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It does provide two concrete constraints: all fields are required and the terminal state must have exactly one action. However, it does not disclose side effects (e.g., what happens to the previous version), return values, or any permission requirements. These constraints are helpful but incomplete for a mutation 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 with zero waste. The core purpose is front-loaded, and the critical constraints are stated immediately. This is exemplary conciseness for a tool with a massive schema.
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 schema being very detailed, the description is insufficient for a complex 11-parameter tool with nested objects and no annotations. It fails to mention what the tool returns, how versioning works, or any operational context. The agent would need to rely solely on the schema, missing guidance on overall workflow and consequences.
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 100%, so the schema already thoroughly documents each parameter. The description adds minimal value beyond that—it reiterates 'all fields required' and the terminal state rule. It does not clarify parameter interactions or provide examples, so a baseline 3 is appropriate.
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 clear verb+resource ('Update a context graph') and adds the key behavior 'by creating a new version.' This is specific and distinguishes it from a plain create operation, though it does not explicitly name the sibling forge_context_graph_create. The purpose is unambiguous.
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 given on when to use this tool versus alternatives like forge_context_graph_create. There is no mention of prerequisites, scenarios, or why one would update versus create. The agent is left to infer usage from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_conversation_evaluateC
Run on-demand metric evaluation against a conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| metric_name | Yes | The metric name to evaluate | |
| interaction_id | No | Specific interaction ID (omit for full conversation) | |
| conversation_id | Yes | The conversation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It implies a read-like operation ('evaluation') but does not disclose whether it is destructive, requires permissions, or has side effects. The minimal disclosure is insufficient.
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 single sentence is very concise and front-loaded. While it lacks details, it avoids unnecessary verbosity. Slightly lower score because it could include key context without losing conciseness.
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 description lacks essential context: no mention of output, prerequisites (e.g., metric must exist), behavior with optional interaction_id, or possible metric_name values. Even without output schema, the description should provide more 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 coverage is 100%, so baseline is 3. The description adds no extra parameter meaning beyond what the schema already provides. No improvement or degradation.
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 runs an on-demand metric evaluation against a conversation, using a specific verb and resource. However, it does not differentiate from sibling tools like forge_conversation_insights, which may also analyze conversations.
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 on when to use this tool versus alternatives (e.g., forge_conversation_insights), nor are prerequisites or restrictions mentioned. The description only states the function without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_conversation_insightsB
Get debugging insights for a conversation, including state transitions and triggered behaviors.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| interaction_id | No | Specific interaction ID (omit for all) | |
| conversation_id | Yes | The conversation ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full burden for behavioral traits. It says 'get' implying a read-only operation, but does not explicitly state it is non-destructive or safe. It also fails to disclose any side effects, permission requirements, or error behavior (e.g., what happens if conversation_id is invalid).
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, well-structured sentence that efficiently conveys the tool's purpose without any fluff or repetition. Every word 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?
The description mentions 'state transitions and triggered behaviors' which hints at output content, but without an output schema, more details on return format or structure would be helpful. For a simple 3-parameter tool with one required field, the description is adequate but leaves room for improvement in 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 coverage is 100% with descriptions for all three parameters (conversation_id, interaction_id, org_id). The description does not add any additional meaning, constraints, or formatting hints beyond the schema. Baseline 3 is appropriate as the schema already provides adequate 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 clearly states the tool retrieves debugging insights for a conversation, specifying it includes state transitions and triggered behaviors. This is specific about the resource (conversation) and the action (get insights), and it distinguishes from sibling tools like 'forge_conversation_evaluate' which likely focuses on evaluation rather than debugging.
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 no guidance on when to use this tool versus alternatives. It does not specify prerequisites, when not to use it (e.g., if the conversation doesn't exist), or mention any related tools. The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_dynamic_behavior_set_createB
Create a new dynamic behavior set (runtime instructions injected based on triggers).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the dynamic behavior set | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| initial_version | Yes | Initial version configuration | |
| applied_to_services | Yes | Service IDs to apply this behavior set to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It only states creation (implying mutation) but lacks details on side effects, auth, 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 a single sentence, concise and front-loaded, with 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?
Given the tool's complexity (5 params, nested objects, no annotations, no output schema), the description is overly brief. It does not explain triggers or behavior sets, relying entirely on the schema.
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 100%, so the description adds no extra meaning beyond what the schema already provides. Baseline score of 3 is appropriate.
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 'Create a new dynamic behavior set' with added context 'runtime instructions injected based on triggers', making the purpose specific and distinguishable from siblings like update.
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 explicit when-to-use or when-not-to-use guidance is provided. The description implies creation but does not differentiate from update or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_dynamic_behavior_set_updateB
Update dynamic behavior set metadata. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated name | |
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| is_active | No | Whether the behavior set is active | |
| applied_to_services | No | Service IDs to apply this behavior set to | |
| dynamic_behavior_set_id | Yes | The dynamic behavior set ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states 'Only provided fields are changed,' which communicates a PATCH-like behavior. However, it omits other behavioral traits such as required permissions, rate limits, idempotency, or error handling, leaving significant gaps for an agent to discover.
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 extremely concise—two short sentences that immediately state the purpose and a key behavioral trait. Every word adds value with no redundancy. The structure is front-loaded with the core action.
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 has 6 parameters, no output schema, and no annotations, the description is too sparse. It fails to explain return values, side effects, validation rules beyond the schema, or how the partial update interacts with default values. An agent would need to experiment or consult additional documentation.
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 100% description coverage, so the baseline is 3. The description adds no further parameter-specific meaning beyond the schema; it only reiterates the partial update behavior. This is acceptable but does not improve understanding beyond what the schema already provides.
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 'Update' and the resource 'dynamic behavior set metadata', which is specific. It adds the detail 'Only provided fields are changed,' clarifying partial update behavior. However, it does not explicitly differentiate from the 'create' sibling tool, which would help an agent choose between them.
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 no guidance on when to use this tool versus alternatives (e.g., forge_dynamic_behavior_set_create). It does not mention prerequisites, when not to use it, or any exclusions. An agent would need to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_entity_createC
Create a new entity of the given type. Provide the entity data as a JSON string or object.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The entity data as a JSON string or object | |
| org_id | No | Org ID (uses active org if omitted) | |
| entity_type | Yes | The entity type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states that the tool creates an entity, without disclosing any behavioral traits such as idempotency, required permissions, or side effects. Since no annotations exist, the description carries the full burden, which it fails to meet.
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 and no unnecessary words. However, it could be expanded slightly to include more behavioral context without losing conciseness.
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 complexity (generic creation for many entity types, no output schema, no annotations), the description is too minimal. It does not cover what the tool returns, error conditions, or how it interacts with other tools.
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?
All three parameters are described in the input schema with 100% coverage. The description redundantly says 'Provide the entity data as a JSON string or object', which adds no new information beyond the schema. Baseline 3 is appropriate.
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 ('Create a new entity') and the resource ('of the given type'), making the purpose explicit. However, it does not distinguish this generic tool from type-specific create tools like forge_agent_create, which can lead to confusion.
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 on when to use this generic create tool versus the type-specific counterparts (e.g., forge_agent_create). The description lacks any context about prerequisites or appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_entity_deleteA
Delete an entity. This is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| entity_id | Yes | The entity ID to delete | |
| entity_type | Yes | The entity type |
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. It discloses that the operation is irreversible, which is critical for a delete action. However, it does not mention side effects, permissions, or error behavior, leaving 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 with zero fluff. The most important information (action + irreversibility) is front-loaded. 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?
The tool is a simple deletion with no output schema. The description covers the essential (what it does and that it's irreversible). Some might expect mention of error handling or permission requirements, but for a basic delete, it is reasonably complete.
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 100% with descriptions for each parameter. The description adds no additional meaning beyond the schema (e.g., no explanation of entity_type enum values or entity_id format). With high coverage, baseline score of 3 is appropriate.
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 (Delete) and the resource (an entity), distinguishing it from sibling tools like forge_entity_create, forge_entity_get, etc. The verb and object are specific and unambiguous.
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 no guidance on when to use this tool versus alternatives. It only notes irreversibility, but does not mention prerequisites, contexts, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_entity_getA
Get the full details of a specific entity by ID. Returns the latest version.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| entity_id | Yes | The entity ID | |
| entity_type | Yes | The entity type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It notes 'returns the latest version' but doesn't disclose response format, side effects, or authentication needs. Adequate but minimal.
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. Front-loaded with purpose and key behavior.
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?
Lacks details on response structure or variations per entity type. 'Full details' is vague. No output schema, so description should compensate more.
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?
Input schema has 100% description coverage for parameters. Description adds no extra meaning beyond the schema, so baseline of 3 is appropriate.
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 verb 'Get' and resource 'full details of a specific entity by ID', distinguishing it from sibling tools like forge_entity_list which lists entities.
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 explicit when-to-use or when-not-to-use guidance. The description implies usage when retrieving a specific entity, but doesn't differentiate from alternatives like forge_entity_list for partial data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_entity_listB
List all entities of a given type in an org.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| entity_type | Yes | The entity type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must bear full burden. It only says 'list all entities', implying read-only behavior but does not disclose pagination, rate limits, or whether all entities are returned at once. The behavioral transparency is minimal.
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 of 11 words. It is concise, front-loaded, and contains no filler or redundant information. 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?
Given the tool's simplicity (2 params, no output schema), the description is adequate for basic understanding. However, it fails to mention important aspects like response format (list of entity IDs or full objects) and whether the result size is limited. This could hinder an agent's effective use.
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 100%, so baseline is 3. The description does not add any additional meaning beyond what the schema already provides for the two parameters. It repeats the overall purpose but offers no extra param context.
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 'List all entities of a given type in an org.' It uses a specific verb ('list'), identifies the resource ('entities'), and specifies scope ('of a given type in an org'). This distinguishes it from sibling tools like forge_entity_get (single entity) and forge_entity_create (create).
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 no guidance on when to use this tool versus alternatives. It does not mention when to prefer forge_entity_get for single entities or if there are limits (e.g., pagination). No contraindications or context for use are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_entity_updateB
Update an existing entity by creating a new version. Provide the full version data.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The entity data as a JSON string or object | |
| org_id | No | Org ID (uses active org if omitted) | |
| entity_id | Yes | The entity ID to update | |
| entity_type | Yes | The entity type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: updating creates a new version, and full version data must be provided. This adds value beyond the name, but lacks detail on side effects, permissions, or old version behavior.
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, front-loaded with purpose, no unnecessary words. Efficiently conveys the core action and a critical behavioral requirement.
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?
No output schema and no description of return value. The tool is moderately complex with sibling ambiguity, yet the description omits common usage context like prerequisites or error handling.
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 100% so parameters are well-documented. The description adds the nuance that 'data' must contain the full version, but overall the schema already provides adequate meaning.
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 an entity by creating a new version. It distinguishes from create and delete siblings, but does not differentiate from specific entity update tools like forge_agent_update, which may cause ambiguity.
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 on when to use this tool versus alternatives. With many sibling update tools, the agent lacks direction on choosing the generic forge_entity_update over specific variants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_list_orgsA
List all configured orgs with their auth status and show the current session/default org.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description fully discloses behavior: it is a read-only list operation that returns auth status and current session info. It adds value by specifying what information is shown beyond just listing.
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, concise sentence that front-loads the key information. Every word is necessary and there is no 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 no output schema, the description provides sufficient context about the tool's output (list of orgs with auth status and current session). It is complete for a straightforward list 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?
The tool has no parameters, so the schema coverage is 100%. Baseline score for zero parameters is 4, and the description does not need to add 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 clearly states the tool lists all configured orgs with auth status and shows the current session/default org. It uses specific verbs ('list', 'show') and resource ('orgs'), and effectively distinguishes itself from sibling tools like forge_add_org, forge_remove_org, and forge_set_org.
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 usage for viewing available orgs and current session, but does not provide explicit guidance on when to use it versus alternatives, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_metric_createC
Create a new metric for evaluating conversations.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique metric name within the organization | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| description | Yes | Description of the metric | |
| metric_value | Yes | Metric value definition. Must include "type" discriminator: "boolean", "numerical", or "categorical" | |
| additional_notes | Yes | Additional notes about the metric (null if none) | |
| applied_to_services | Yes | Service IDs this metric applies to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, but it only says 'Create a new metric'. It does not disclose side effects, uniqueness conflict behavior, response format, or any other operational traits beyond the obvious creation action.
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 is concise, though it could be slightly more structured by including a sibling reference or high-level behavior note.
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 rich parameter schemas, this is a create operation with no output schema and no annotations. The description omits return value expectations, duplicate-name behavior, and any post-creation effects, leaving an agent without important operational context.
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 100%, so the schema already documents all seven parameters thoroughly. The description adds no parameter-level meaning, but it does not need to compensate for missing schema information, landing at the baseline.
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 action ('Create') and resource ('a new metric'), with the domain context 'for evaluating conversations'. It is unambiguous among the sibling tools, though it does not explicitly differentiate itself from forge_metric_update.
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 given for when to use this tool versus alternatives such as forge_metric_update or forge_entity_create. There is no mention of prerequisites, preferred conditions, or exclusions, so an agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_metric_updateC
Update a metric. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| metric_id | Yes | The metric ID to update | |
| description | No | Updated description | |
| additional_notes | No | Additional notes about the metric | |
| applied_to_services | No | Service IDs this metric applies to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose partial-update semantics ('Only provided fields are changed'), which is useful, but it omits side effects, authorization requirements, error behavior, or response details. For a mutation tool this is a significant gap.
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 with no filler. The purpose is front-loaded, and the patch behavior is communicated in a compact second sentence. 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 mutation tool with six parameters, no annotations, and no output schema, this description is underspecified. It does not explain what happens when fields are omitted, what the response contains, or any prerequisites or side effects, leaving an agent with little context 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?
Schema coverage is 100%, so all six parameters already have descriptions. The description adds no parameter-specific detail beyond reinforcing the partial-update behavior, which is already implied by the schema's optional fields. The baseline of 3 is appropriate.
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 action ('Update') on a specific resource ('a metric'), which distinguishes it from metric creation and other sibling update tools. However, it does not explicitly contrast itself with forge_metric_create or any other sibling, so it stops short of 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?
No guidance is given on when to use this tool versus alternatives such as forge_metric_create or other update tools. The only usage hint is the partial-update statement 'Only provided fields are changed,' which is behavioral rather than contextual.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_persona_createC
Create a new simulation persona with its initial version.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the simulation persona | |
| role | Yes | Role of the simulation persona | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| initial_version | Yes | Initial version of the persona |
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. It only states the basic operation without disclosing any behavioral traits such as idempotency, error handling, or side effects (e.g., what happens if a persona with the same name exists).
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, front-loaded with the key action. It is concise, but given the complexity of nested parameters, slightly more context could be justified without sacrificing conciseness.
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 description is too brief for a tool with a nested object and 5 parameters. It does not explain what a simulation persona is or how it fits into the larger system, and lacks return value information (no output schema).
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 100%, and each parameter already has a detailed description in the schema. The tool description adds no additional meaning beyond that, so baseline 3 applies.
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 (create) and resource (simulation persona with initial version). It distinguishes from the sibling forge_persona_update by implying this is for creation, but could be more explicit about the lifecycle.
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 on when to use this tool versus alternatives like forge_persona_update. No prerequisites or context provided for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_persona_updateA
Update persona metadata (tags). Use forge_entity_update for version changes.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| persona_id | Yes | The persona ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of disclosure. It only states that the tool updates metadata, which implies mutation, but lacks details on auth requirements, side effects, rate limits, or whether the update is a merge or replacement. This minimal disclosure is insufficient.
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 clear, front-loaded sentences with no wasted words. The first sentence states the purpose, the second provides an alternative usage guideline. 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 updates persona metadata with a nested tags object and no output schema, the description is minimal. It does not explain the return value, whether the update is partial or full, or any prerequisites. While the schema covers parameter details, the description could provide more context for effective use, but it is adequate.
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 100%, so the schema already describes all parameters. The description adds no extra meaning beyond what is in the schema (e.g., explaining the tags pattern or the persona_id role). Baseline 3 is appropriate.
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 'Update persona metadata (tags)' which specifies the verb (update) and resource (persona metadata/tags), and it distinguishes from the sibling tool forge_entity_update by noting that tool is for version 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?
The description explicitly directs to 'Use forge_entity_update for version changes,' providing a clear alternative for a specific case. However, it does not cover other potential alternatives like forge_persona_create for creating personas, so it is somewhat limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_remove_orgB
Remove stored credentials for an org.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | The org ID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It only states the action without mentioning potential side effects, destructiveness, or dependencies. This is insufficient for an agent to understand the impact.
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 efficiently conveys the core 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 the simple nature (one parameter, no output schema), the description is minimally adequate but lacks context about reversibility, confirmation, or post-removal effects. It meets the basic need but not more.
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 100% for the single parameter org_id, with a clear description in the input schema. The tool description adds no additional meaning beyond what the schema already provides, so baseline of 3 is appropriate.
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 'Remove stored credentials for an org' clearly states the verb (remove) and the resource (stored credentials for an org). It effectively distinguishes itself from sibling tools like forge_add_org and forge_set_org.
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 on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_scenario_createA
Create a new simulation scenario with its initial version.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the simulation scenario | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| initial_version | Yes | Initial version of the scenario |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only states that a scenario and initial version are created. It does not disclose side effects, org scoping behavior, required fields beyond the schematic plain reading, or what happens on success.
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?
A single front-loaded sentence delivers the core action and scope with no filler. Every word contributes to identifying what the tool does.
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 nested-object create with no output schema and no annotations, the high-level sentence plus the rich parameter schema is minimally sufficient, but it omits context like active-org behavior and result expectations. It is complete enough for a simple create but leaves behavioral gaps to inference.
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 100%, so the description does not need to restate parameter meanings. The phrase 'initial version' only echoes the initial_version parameter and adds no semantic detail beyond the schema.
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 ('Create') with a specific resource ('simulation scenario') and adds that it includes the 'initial version,' which clearly distinguishes it from the update-oriented sibling forge_scenario_update. The verb-resource pairing is unambiguous.
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 wording implies this tool is for creating a scenario rather than updating one, but it never explicitly says when to choose it over forge_scenario_update or other create tools. No alternatives, prerequisites, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_scenario_updateA
Update scenario metadata (tags). Use forge_entity_update for version changes.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| scenario_id | Yes | The scenario ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. Only states 'update scenario metadata', which implies mutation but lacks specifics on side effects, permissions, idempotency, or how updates are applied (replace/merge). Insufficient for a mutation 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?
Extremely concise: one sentence plus a recommendation. Front-loaded with key information, 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?
No output schema, and description does not explain return values or effect details (e.g., whether tags are replaced or merged). For a simple update tool with 3 parameters, it covers the basics but lacks depth.
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 100% with descriptions for each parameter. Description adds minimal value beyond the schema (only mentions 'tags'). Baseline score of 3 is appropriate.
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?
Clearly states action (update), resource (scenario), and scope (metadata, specifically tags). Differentiates from sibling forge_entity_update by specifying it handles version 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?
Explicitly tells when not to use (for version changes, use forge_entity_update). Provides clear alternative, but does not elaborate on other usage contexts or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_service_createA
Create a new service linking an agent and context graph into a deployable unit. IMPORTANT: Both the agent and context graph must already have at least one version before creating the service.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Service name | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| agent_id | Yes | ID of the agent to link | |
| keyterms | Yes | Keywords for audio transcription correction (each: 1-3 lowercase words, a-z and hyphens only) | |
| is_active | Yes | Whether the service is active | |
| description | Yes | Brief description of what this service does | |
| service_hierarchical_state_machine_id | Yes | ID of the context graph to link |
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 disclosing behavioral traits. It reveals the important prerequisite that both linked resources must have versions, which is valuable. However, it lacks details on idempotency, error conditions for duplicate names, or what happens during concurrent operations, leaving some uncertainty.
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 exceptionally concise: two sentences that first declare the purpose and then highlight a critical precondition. Every sentence adds necessary information without 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?
Given the tool's complexity (8 parameters, all required except one, nested objects), the description is sparse. It omits crucial information such as what the tool returns (no output schema), error handling for duplicate names, or the behavior when optional fields like org_id are omitted. The precondition is helpful but insufficient for a 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?
The input schema has 100% description coverage, so the schema itself already documents parameter meanings. The tool description adds no additional context beyond what is in the schema, such as how the 'keyterms' or 'tags' parameters interact with the service creation process.
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 creates a new service linking an agent and context graph into a deployable unit. It distinguishes itself from sibling tools like forge_service_update (which updates an existing service) and other create tools like forge_agent_create, which focus on different resources.
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 an explicit precondition: both the agent and context graph must have at least one version. This guides the user on when it's appropriate to call this tool. However, it does not explicitly mention alternatives or when not to use it, though the name and context make it fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_service_updateB
Update an existing service. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Service name | |
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| agent_id | No | ID of the agent to link | |
| keyterms | No | Keywords for audio transcription correction (each: 1-3 lowercase words, a-z and hyphens only) | |
| is_active | No | Whether the service is active | |
| service_id | Yes | The service ID to update | |
| description | No | Brief description | |
| service_hierarchical_state_machine_id | No | ID of the context graph to link |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It only discloses partial update behavior ('Only provided fields are changed') but omits critical details such as authentication requirements, idempotency, side effects on linked resources, or error handling.
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?
Single sentence, front-loaded with key information. No redundant or extraneous content.
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 having 9 parameters and no output schema or annotations, the description is minimal. It explains the partial update but fails to cover return values, error conditions, or integration with sibling tools like 'forge_service_create'.
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 100% with parameter descriptions. The description adds value by clarifying that only provided fields are updated (not resetting omitted fields), which is beyond what the schema explicitly states.
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 the verb 'Update' and resource 'existing service', distinguishing it from the sibling 'forge_service_create' (create). The phrase 'Only provided fields are changed' adds specificity about the partial update behavior.
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 on when to use this tool versus alternatives like 'forge_service_create' or 'forge_agent_update'. No prerequisites or exclusions provided, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_set_orgA
Set the active org for this session. Subsequent tool calls will use this org by default.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | Yes | The org ID to set as active | |
| set_as_default | No | Also save as the default org in ~/.amigo/config.json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses session scope and default saving behavior, but doesn't mention reversibility or error handling. Adequate for a simple setter.
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, 17 words, front-loaded with main purpose. No waste, excellent efficiency.
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?
No output schema needed; description explains session and default effects. Lacks error scenarios but sufficient for its simplicity.
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 100% with clear parameter descriptions. The overall description adds context about session scope but doesn't add new meaning beyond schema for individual parameters.
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 'set', the resource 'active org', and the effect on subsequent calls, distinguishing it from siblings like forge_add_org and forge_remove_org.
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 when to use (before calls needing the org context) and mentions the default behavior, but does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_simulateC
Run an automated multi-turn conversation simulation against a service.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| max_turns | No | Maximum number of turns (default: 10) | |
| version_set | No | Version set to use (default: release) | |
| service_name | Yes | The service name | |
| initial_message | No | Initial user message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose side effects, permissions, or resource requirements. It only states 'simulation' without indicating whether it's a read or write operation, or if it creates records. This is insufficient for a complex 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 a single concise sentence, efficiently communicating the core purpose without unnecessary words. However, it could add value without losing conciseness.
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 complex (multi-turn simulation) but the description omits return values, output format, and any behavioral traits. With no output schema, the burden on the description is higher, and it fails to provide a complete picture for the agent.
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?
All 5 parameters are described in the schema (100% coverage), so the description adds no new information. It does not explain parameter interdependencies or defaults beyond what the schema provides, meeting the baseline for full schema coverage.
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 runs an automated multi-turn conversation simulation, which is specific and distinguishes from siblings like forge_smoke_test (likely a simpler test) and forge_conversation_evaluate. However, it doesn't specify the output or result format.
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 on when to use this tool vs siblings (e.g., forge_smoke_test, forge_conversation_evaluate). No prerequisites or context hints are provided, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_smoke_testA
Run a quick smoke test against a service. Creates a conversation, sends a message, and returns the agent's response.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| message | No | The user message to send (omit for agent greeting only) | |
| version_set | No | Version set to use (default: release) | |
| service_name | Yes | The service name to test |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the steps (create conversation, send message, return response) but omits side effects like persistent data creation or cleanup. Basic transparency is present but lacks depth.
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 extremely concise with two sentences: the first states the purpose, the second details the process. No unnecessary words, 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 has 4 parameters and no output schema, the description provides the basic flow but lacks details on return value format, error scenarios, and cleanup. It is not fully complete for a smoke test 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 100%, so the schema already documents each parameter. The tool description does not add additional meaning or context beyond what is in the schema, such as how version_set or org_id affect the test. Baseline of 3 applies.
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: to run a quick smoke test, including creating a conversation and sending a message. It uses a specific verb and resource, differentiating it from sibling tools like forge_simulate which are broader in scope.
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 mentions 'quick smoke test' implying a fast check, but it does not explicitly state when to use this tool versus alternatives (e.g., forge_simulate) or when not to use it. No guidelines on prerequisites or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_tool_createB
Create a new tool (external action the agent can invoke).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique tool name (lowercase, alphanumeric, underscores) | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| description | Yes | Description of the tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states 'Create a new tool' without disclosing side effects, permissions, constraints (e.g., uniqueness of name), or error conditions. The agent is not informed about what happens on success or failure.
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, clear sentence with no extraneous words. It is well-structured and front-loaded.
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 description is minimal but covers the essential purpose. Given the complete schema and no output schema, it is adequate. However, additional context about what constitutes a valid tool or post-creation behavior would improve 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 100%, so the baseline is 3. The description does not add extra meaning beyond the schema's parameter descriptions. It correctly implies the tool creation but adds no nuance.
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 ('Create') and the resource ('a new tool'), and adds context by defining a tool as an external action the agent can invoke. This distinguishes it from sibling tools like forge_tool_update.
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 on when to use this tool versus alternatives (e.g., forge_tool_update). There are no prerequisites or scenarios mentioned, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_tool_updateA
Update tool metadata (description and tags). Tool versions are published separately.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| tool_id | Yes | The tool ID to update | |
| description | No | Updated description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to specify whether updates overwrite or merge, what happens to existing tags, auth requirements, or side effects. The only behavioral note is about version separation.
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, front-loaded with the core purpose. Every sentence is earned; no redundancy or 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?
Given the complexity (4 params including nested tags) and no output schema, the description is too brief. It does not clarify update semantics (merge vs. replace), return value, or error conditions, leaving significant gaps for an agent.
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 100%, so the baseline is 3. The description adds no additional meaning beyond the schema, which already well-documents all parameters.
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 tool metadata (description and tags) and distinguishes from version publishing. The verb and resource are specific and unambiguous.
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 clear context for when to use this tool (update metadata) and explicitly states that version publishing is separate, guiding agents away from using this for version updates. However, it does not explicitly contrast with forge_tool_create for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_unit_test_createB
Create a new simulation unit test.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the unit test | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| persona_id | Yes | Persona ID for the test | |
| service_id | Yes | Service ID to run the test on | |
| description | Yes | Description of the unit test | |
| scenario_id | Yes | Scenario ID for the test | |
| max_interactions | Yes | Max interactions before the test fails | |
| success_criterions | Yes | Success criteria for the test | |
| service_version_set_name | Yes | Version set name to use (e.g., 'edge', 'release') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Create a new simulation unit test,' which is obvious from the name. No annotations are provided, so the description fails to disclose side effects, permissions, rate limits, or what happens upon creation.
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 with no fluff, being concise. However, it is very minimal and lacks structure or additional helpful details.
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?
With 10 parameters, including complex nested objects like success_criterions, and no output schema or annotations, the description is severely inadequate. It does not explain return values, required permissions, or behavior of the creation process.
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 100%, so the schema already documents all parameters. The description adds no additional meaning or examples beyond what's in the schema.
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 'Create a new simulation unit test,' specifying a verb and resource. It distinguishes from siblings like forge_unit_test_update and forge_unit_test_set_create.
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 on when to use this tool versus alternatives, such as forge_unit_test_update for modifying existing tests or forge_simulate for running simulations. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_unit_test_set_createB
Create a new unit test set (collection of unit tests to run together).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the unit test set | |
| tags | Yes | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| description | Yes | Description of the unit test set (null if none) | |
| unit_test_runs | Yes | Unit test runs included in this set |
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 only states that a new set is created and gives no information about side effects, required permissions, idempotency, validation outcomes, or what happens on success or failure.
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 clear sentence with no redundant wording. The core purpose is front-loaded and every word contributes to understanding the 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?
Despite rich schema coverage, the tool has no annotations. No output schema, no explanation of return values, and no contextual details about how org_id behaves or when this set should be used. For a tool with nested parameters and a create action, this description is too sparse to be considered complete.
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 100%, so the baseline is 3. The parenthetical 'collection of unit tests to run together' adds mild context for the unit_test_runs parameter, but the description otherwise adds no meaning beyond what the schema already documents for each parameter.
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 names a specific action ('Create') and a specific resource ('unit test set'), and clarifies that a set is a collection of unit tests run together. This distinguishes the tool from the sibling forge_unit_test_create, which creates an individual test, and from forge_unit_test_set_update, which modifies an existing set. The purpose is immediately clear.
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 offers no guidance on when to use this tool versus alternatives like forge_unit_test_set_update or forge_unit_test_create. It simply states that it creates a new set, leaving usage decisions entirely to inference from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_unit_test_set_updateA
Update a unit test set. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated name | |
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| description | No | Updated description | |
| unit_test_runs | No | Unit test runs included in this set | |
| unit_test_set_id | Yes | The unit test set ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It does disclose the important PATCH-like behavior that omitted fields are left unchanged. However, it does not clarify whether nested values like tags or unit_test_runs are merged or replaced, what happens if the test set does not exist, or what the response contains.
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 compact two-sentence definition with zero filler. The primary action is front-loaded, and the critical partial-update behavior follows immediately. 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?
Despite having six parameters, including nested objects, no output schema, and no annotations, the description is extremely minimal. It leaves out expected return behavior, semantics for replacing versus merging nested collections, error handling, and permissions. An agent would need to open every parameter schema and still would not know the full update behavior.
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 100%, so the baseline is 3. The statement 'Only provided fields are changed' adds meaningful cross-parameter semantics beyond the schema, telling the agent that all parameters are effectively optional and that omitted fields retain their existing values. This is useful context that the schema alone does not convey.
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 names a specific verb ('Update') and resource ('unit test set'), so the agent immediately knows what the tool does. The additional sentence 'Only provided fields are changed' distinguishes this as a partial-update operation versus the sibling create tool and any full-replacement update tools. This makes the purpose unambiguous.
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 usage when modifying an existing unit test set, but it provides no explicit guidance on when to choose this tool over forge_unit_test_set_create or other update variants. There are no stated exclusions, prerequisites, or alternative conditions, leaving the agent to infer usage from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_unit_test_updateB
Update a unit test. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags (alphanumeric keys and values, no hyphens or special characters) | |
| org_id | No | Org ID (uses active org if omitted) | |
| run_count | No | Number of sessions to simulate per run | |
| persona_id | No | Persona ID for the test | |
| service_id | No | Service ID to run the test on | |
| description | No | Updated description | |
| scenario_id | No | Scenario ID for the test | |
| unit_test_id | Yes | The unit test ID to update | |
| max_interactions | No | Max interactions before the test fails | |
| success_criterions | No | Success criteria for the test | |
| service_version_set_name | No | Version set name to use |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only discloses partial update behavior ('Only provided fields are changed'), but omits details like required permissions, idempotency, side effects, or error handling.
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?
Single sentence, concise. However, given the tool's complexity (11 params, nested objects), some additional context could be useful. Still, no fluff.
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 high complexity with 11 parameters and nested objects, but the description is minimal. No explanation of return values, error conditions, or the scope of changes beyond the partial update hint.
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 100%, so baseline is 3. The description adds no additional meaning beyond what the input schema already provides for each parameter.
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 'Update' and the resource 'unit test'. It distinguishes from sibling tools like forge_unit_test_create by implying mutation, and the phrase 'Only provided fields are changed' adds specificity.
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 on when to use this tool versus alternatives (e.g., forge_unit_test_create or forge_unit_test_set_update). No mention of prerequisites, context, or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_version_rollbackB
Roll back an entity to a previous version. Lists available versions for selection.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| entity_id | Yes | The entity ID | |
| entity_type | Yes | The entity type (agent or context_graph) | |
| version_number | Yes | The version number to roll back to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of disclosing behavioral traits. It only states 'Roll back' and 'Lists available versions', which are insufficient. The tool likely performs a destructive action (modifying state), but does not mention side effects, permission requirements, or what happens on success/failure. The listing behavior is not reflected in the input schema.
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 short with two sentences and no unnecessary words. However, the second sentence about listing versions may be misleading if the tool does not actually perform a list operation, slightly detracting from conciseness.
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 lacks an output schema and the description does not hint at return values. Additionally, given the potential destructiveness of rollback, the description should mention error scenarios, confirmation steps, or permissions. The mention of listing versions is unsupported by the parameters, leaving the user uncertain about the tool's complete behavior.
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?
Input schema description coverage is 100%, so each parameter already has a description. The tool's description adds no additional semantic information beyond what the schema provides. For example, it doesn't explain the relationship between entity_type and entity_id, or how version_number is validated.
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 main function: rolling back an entity to a previous version. It uses specific verbs and resource, and the tool name 'forge_version_rollback' is distinct from sibling tools like forge_version_set_list and forge_version_set_promote. However, the mention of 'Lists available versions for selection' is ambiguous because the input schema requires a version_number, implying the user already knows the target 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 implies the tool is used when an entity needs to be reverted to an earlier version, but it provides no explicit guidance on when to use it instead of alternatives like forge_version_set_promote or forge_entity_update. There are no when-not-to-use conditions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_version_set_listB
List all version sets for a service, showing pinned versions.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| service_name | Yes | The service name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only states the action (list) and output detail (pinned versions) but does not confirm read-only nature, required permissions, pagination behavior, or any side effects. This is minimal info for a safe operation.
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 core action and key output detail. It is concise and front-loaded, though it could be slightly improved by adding a brief note on output structure without becoming verbose.
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 no output schema, the description does not specify the return format or fields beyond 'pinned versions.' For a list tool, context on what is returned (e.g., version set IDs, names) would improve completeness. Still, with simple parameters, it is minimally adequate.
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 already provides descriptions for both parameters (service_name and org_id) with 100% coverage. The description adds no extra semantic meaning beyond 'for a service,' which is already clear from the schema. Thus, it meets the baseline of 3.
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 lists all version sets for a service, with the additional detail of showing pinned versions. The verb 'list' and resource 'version sets' are specific, and it distinguishes from sibling tools like forge_version_set_promote and forge_version_set_upsert.
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 typical usage for listing version sets but provides no explicit guidance on when to use this tool versus other version-related tools (e.g., promote, upsert). No prerequisites or exclusions are mentioned, leaving the agent to infer context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_version_set_promoteB
Promote one version set to another (e.g. preview -> release).
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | Org ID (uses active org if omitted) | |
| source | Yes | Source version set name (e.g. preview) | |
| target | Yes | Target version set name (e.g. release) | |
| service_name | Yes | The service name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It states 'promote' but fails to disclose whether the operation is destructive, requires permissions, or has side effects. The example is minimal.
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 with an example, no wasted words, and covers the core action. However, it could be slightly more informative without losing conciseness.
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?
With 4 parameters, no output schema, and no annotations, the description is insufficient. It lacks details on return values, permissions, and what constitutes a valid promotion (e.g., must source exist?).
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 100%, so baseline is 3. The description adds the example 'preview -> release' but does not elaborate on parameter semantics beyond what the schema already provides.
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 uses a specific verb 'promote' and identifies the resource 'version set'. It provides an example ('preview -> release') and is distinct from sibling tools like list, rollback, and upsert.
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 on when to use this tool versus alternatives (e.g., forge_version_set_upsert or forge_version_rollback). The description does not mention prerequisites or scenarios where promotion is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forge_version_set_upsertA
Create or update a version set for a service. Use latest=true to pin to the current latest versions.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | Pin to current latest versions | |
| org_id | No | Org ID (uses active org if omitted) | |
| set_name | Yes | The version set name (e.g. preview, release) | |
| service_name | Yes | The service name | |
| agent_version | No | Specific agent version number | |
| context_graph_version | No | Specific context graph version number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the upsert behavior and the latest pinning, but lacks details on side effects, auth, or conflict handling. Adequate but not thorough.
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, front-loaded, no unnecessary words. Effectively communicates the core purpose and a key usage hint.
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 6 parameters and no output schema, the description is fairly complete: it explains the upsert purpose and the latest option. Lacks details on parameter interactions and return values, but acceptable for the complexity.
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 100%, so baseline is 3. The description adds value with the usage hint for latest, but repeats similar info from the schema. Marginal improvement.
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 creates or updates a version set for a service, with a specific usage hint for the latest parameter. This distinguishes it from sibling tools like list and promote.
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 a key usage hint (latest=true), but does not explicitly state when to use this tool versus alternatives like forge_version_set_list or forge_version_set_promote. It is mostly clear from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.14- Changed
forge_context_graph_update1 field changed- changed
Input schema / properties / states / items / anyOfPrevious value: -[ - { - "properties": { - "action_guidelines": { - "items": { - "type": "string" - }, - "type": "array" - }, - "action_tool_call_specs": { - "items": { - "properties": { - "additional_instruction": { - "description": "Extra context for the LLM when using this tool", - "type": "string" - }, - "audio_filler_triggered_after": { - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "result_persistence": { - "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", - "enum": [ - "ephemeral", - "persisted-preferred", - "persisted" - ], - "type": "string" - }, - "tool_id": { - "description": "24-char hex ID of the tool", - "type": "string" - }, - "version_constraint": { - "description": "Version constraint (e.g., \">=1\")", - "type": "string" - } - }, - "required": [ - "tool_id", - "version_constraint", - "additional_instruction", - "audio_fillers", - "audio_filler_triggered_after", - "result_persistence" - ], - "type": "object" - }, - "type": "array" - }, - "actions": { - "description": "Actions the agent should take", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - }, - "boundary_constraints": { - "items": { - "type": "string" - }, - "type": "array" - }, - "exit_condition_tool_call_specs": { - "items": { - "properties": { - "additional_instruction": { - "description": "Extra context for the LLM when using this tool", - "type": "string" - }, - "audio_filler_triggered_after": { - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "result_persistence": { - "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", - "enum": [ - "ephemeral", - "persisted-preferred", - "persisted" - ], - "type": "string" - }, - "tool_id": { - "description": "24-char hex ID of the tool", - "type": "string" - }, - "version_constraint": { - "description": "Version constraint (e.g., \">=1\")", - "type": "string" - } - }, - "required": [ - "tool_id", - "version_constraint", - "additional_instruction", - "audio_fillers", - "audio_filler_triggered_after", - "result_persistence" - ], - "type": "object" - }, - "type": "array" - }, - "exit_conditions": { - "items": { - "properties": { - "description": { - "description": "When this transition should fire", - "type": "string" - }, - "next_state": { - "description": "Name of the target state (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - } - }, - "required": [ - "description", - "next_state" - ], - "type": "object" - }, - "type": "array" - }, - "intra_state_navigation_guidelines": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "description": "Unique state name (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "objective": { - "description": "What the agent should accomplish in this state", - "type": "string" - }, - "skip_active_memory_retrieval": { - "type": "boolean" - }, - "type": { - "const": "action", - "type": "string" - } - }, - "required": [ - "type", - "name", - "objective", - "actions", - "intra_state_navigation_guidelines", - "action_guidelines", - "boundary_constraints", - "exit_conditions", - "action_tool_call_specs", - "exit_condition_tool_call_specs", - "skip_active_memory_retrieval" - ], - "type": "object" - }, - { - "properties": { - "audio_filler_triggered_after": { - "maximum": 10, - "minimum": 0, - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "maxItems": 5, - "type": "array" - }, - "decision_guidelines": { - "description": "Rules for choosing the next state", - "items": { - "type": "string" - }, - "type": "array" - }, - "exit_conditions": { - "items": { - "properties": { - "description": { - "description": "When this transition should fire", - "type": "string" - }, - "next_state": { - "description": "Name of the target state (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - } - }, - "required": [ - "description", - "next_state" - ], - "type": "object" - }, - "type": "array" - }, - "name": { - "description": "Unique state name (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "objective": { - "type": "string" - }, - "tool_call_specs": { - "items": { - "properties": { - "additional_instruction": { - "description": "Extra context for the LLM when using this tool", - "type": "string" - }, - "audio_filler_triggered_after": { - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "result_persistence": { - "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", - "enum": [ - "ephemeral", - "persisted-preferred", - "persisted" - ], - "type": "string" - }, - "tool_id": { - "description": "24-char hex ID of the tool", - "type": "string" - }, - "version_constraint": { - "description": "Version constraint (e.g., \">=1\")", - "type": "string" - } - }, - "required": [ - "tool_id", - "version_constraint", - "additional_instruction", - "audio_fillers", - "audio_filler_triggered_after", - "result_persistence" - ], - "type": "object" - }, - "type": "array" - }, - "type": { - "const": "decision", - "type": "string" - } - }, - "required": [ - "type", - "name", - "objective", - "decision_guidelines", - "exit_conditions", - "tool_call_specs", - "audio_fillers", - "audio_filler_triggered_after" - ], - "type": "object" - }, - { - "properties": { - "name": { - "description": "Unique state name (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "next_state": { - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "queries": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Search queries for user memory" - }, - "requested_information": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Description of what to retrieve" - }, - "type": { - "const": "recall", - "type": "string" - } - }, - "required": [ - "type", - "name", - "queries", - "requested_information", - "next_state" - ], - "type": "object" - }, - { - "properties": { - "inner_thought": { - "description": "Fixed inner thought injected into context", - "type": "string" - }, - "name": { - "description": "Unique state name (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "next_state": { - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "type": { - "const": "annotation", - "type": "string" - } - }, - "required": [ - "type", - "name", - "inner_thought", - "next_state" - ], - "type": "object" - }, - { - "properties": { - "audio_filler_triggered_after": { - "maximum": 10, - "minimum": 0, - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "maxItems": 5, - "type": "array" - }, - "name": { - "description": "Unique state name (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "next_state": { - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "problem": { - "description": "Problem for the agent to reason about", - "type": "string" - }, - "tool_call_specs": { - "items": { - "properties": { - "additional_instruction": { - "description": "Extra context for the LLM when using this tool", - "type": "string" - }, - "audio_filler_triggered_after": { - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "result_persistence": { - "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", - "enum": [ - "ephemeral", - "persisted-preferred", - "persisted" - ], - "type": "string" - }, - "tool_id": { - "description": "24-char hex ID of the tool", - "type": "string" - }, - "version_constraint": { - "description": "Version constraint (e.g., \">=1\")", - "type": "string" - } - }, - "required": [ - "tool_id", - "version_constraint", - "additional_instruction", - "audio_fillers", - "audio_filler_triggered_after", - "result_persistence" - ], - "type": "object" - }, - "type": "array" - }, - "type": { - "const": "reflection", - "type": "string" - }, - "word_limit": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "type", - "name", - "problem", - "word_limit", - "next_state", - "tool_call_specs", - "audio_fillers", - "audio_filler_triggered_after" - ], - "type": "object" - }, - { - "properties": { - "designated_tool": { - "properties": { - "additional_instruction": { - "description": "Extra context for the LLM when using this tool", - "type": "string" - }, - "audio_filler_triggered_after": { - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "result_persistence": { - "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", - "enum": [ - "ephemeral", - "persisted-preferred", - "persisted" - ], - "type": "string" - }, - "tool_id": { - "description": "24-char hex ID of the tool", - "type": "string" - }, - "version_constraint": { - "description": "Version constraint (e.g., \">=1\")", - "type": "string" - } - }, - "required": [ - "tool_id", - "version_constraint", - "additional_instruction", - "audio_fillers", - "audio_filler_triggered_after", - "result_persistence" - ], - "type": "object" - }, - "designated_tool_call_context": { - "type": "string" - }, - "designated_tool_call_guidances": { - "items": { - "type": "string" - }, - "type": "array" - }, - "designated_tool_call_objective": { - "type": "string" - }, - "designated_tool_call_params_generation_audio_filler_triggered_after": { - "maximum": 10, - "minimum": 0, - "type": "number" - }, - "designated_tool_call_params_generation_audio_fillers": { - "items": { - "type": "string" - }, - "maxItems": 5, - "type": "array" - }, - "designated_tool_call_validations": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "description": "Unique state name (alphanumeric and underscores only)", - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "next_state": { - "pattern": "^[A-Za-z0-9_]+$", - "type": "string" - }, - "tool_call_specs": { - "items": { - "properties": { - "additional_instruction": { - "description": "Extra context for the LLM when using this tool", - "type": "string" - }, - "audio_filler_triggered_after": { - "type": "number" - }, - "audio_fillers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "result_persistence": { - "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", - "enum": [ - "ephemeral", - "persisted-preferred", - "persisted" - ], - "type": "string" - }, - "tool_id": { - "description": "24-char hex ID of the tool", - "type": "string" - }, - "version_constraint": { - "description": "Version constraint (e.g., \">=1\")", - "type": "string" - } - }, - "required": [ - "tool_id", - "version_constraint", - "additional_instruction", - "audio_fillers", - "audio_filler_triggered_after", - "result_persistence" - ], - "type": "object" - }, - "type": "array" - }, - "type": { - "const": "tool-call", - "type": "string" - } - }, - "required": [ - "type", - "name", - "next_state", - "designated_tool", - "designated_tool_call_objective", - "designated_tool_call_context", - "designated_tool_call_guidances", - "designated_tool_call_validations", - "designated_tool_call_params_generation_audio_fillers", - "designated_tool_call_params_generation_audio_filler_triggered_after", - "tool_call_specs" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "action_guidelines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "action_tool_call_specs": { + "items": { + "properties": { + "additional_instruction": { + "description": "Extra context for the LLM when using this tool", + "type": "string" + }, + "audio_filler_triggered_after": { + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "result_persistence": { + "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", + "enum": [ + "ephemeral", + "persisted-preferred", + "persisted" + ], + "type": "string" + }, + "tool_id": { + "description": "24-char hex ID of the tool", + "type": "string" + }, + "version_constraint": { + "description": "Version constraint (e.g., \">=1\")", + "type": "string" + } + }, + "required": [ + "tool_id", + "version_constraint", + "additional_instruction", + "audio_fillers", + "audio_filler_triggered_after", + "result_persistence" + ], + "type": "object" + }, + "type": "array" + }, + "actions": { + "description": "Actions the agent should take", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "boundary_constraints": { + "items": { + "type": "string" + }, + "type": "array" + }, + "exit_condition_tool_call_specs": { + "items": { + "properties": { + "additional_instruction": { + "description": "Extra context for the LLM when using this tool", + "type": "string" + }, + "audio_filler_triggered_after": { + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "result_persistence": { + "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", + "enum": [ + "ephemeral", + "persisted-preferred", + "persisted" + ], + "type": "string" + }, + "tool_id": { + "description": "24-char hex ID of the tool", + "type": "string" + }, + "version_constraint": { + "description": "Version constraint (e.g., \">=1\")", + "type": "string" + } + }, + "required": [ + "tool_id", + "version_constraint", + "additional_instruction", + "audio_fillers", + "audio_filler_triggered_after", + "result_persistence" + ], + "type": "object" + }, + "type": "array" + }, + "exit_conditions": { + "items": { + "properties": { + "description": { + "description": "When this transition should fire", + "type": "string" + }, + "next_state": { + "description": "Name of the target state (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + } + }, + "required": [ + "description", + "next_state" + ], + "type": "object" + }, + "type": "array" + }, + "intra_state_navigation_guidelines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Unique state name (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "objective": { + "description": "What the agent should accomplish in this state", + "type": "string" + }, + "skip_active_memory_retrieval": { + "type": "boolean" + }, + "type": { + "const": "action", + "type": "string" + } + }, + "required": [ + "type", + "name", + "objective", + "actions", + "intra_state_navigation_guidelines", + "action_guidelines", + "boundary_constraints", + "exit_conditions", + "action_tool_call_specs", + "exit_condition_tool_call_specs", + "skip_active_memory_retrieval" + ], + "type": "object" + }, + { + "properties": { + "audio_filler_triggered_after": { + "maximum": 10, + "minimum": 0, + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" + }, + "decision_guidelines": { + "description": "Rules for choosing the next state", + "items": { + "type": "string" + }, + "type": "array" + }, + "exit_conditions": { + "items": { + "properties": { + "description": { + "description": "When this transition should fire", + "type": "string" + }, + "next_state": { + "description": "Name of the target state (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + } + }, + "required": [ + "description", + "next_state" + ], + "type": "object" + }, + "type": "array" + }, + "name": { + "description": "Unique state name (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "objective": { + "type": "string" + }, + "tool_call_specs": { + "items": { + "properties": { + "additional_instruction": { + "description": "Extra context for the LLM when using this tool", + "type": "string" + }, + "audio_filler_triggered_after": { + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "result_persistence": { + "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", + "enum": [ + "ephemeral", + "persisted-preferred", + "persisted" + ], + "type": "string" + }, + "tool_id": { + "description": "24-char hex ID of the tool", + "type": "string" + }, + "version_constraint": { + "description": "Version constraint (e.g., \">=1\")", + "type": "string" + } + }, + "required": [ + "tool_id", + "version_constraint", + "additional_instruction", + "audio_fillers", + "audio_filler_triggered_after", + "result_persistence" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "const": "decision", + "type": "string" + } + }, + "required": [ + "type", + "name", + "objective", + "decision_guidelines", + "exit_conditions", + "tool_call_specs", + "audio_fillers", + "audio_filler_triggered_after" + ], + "type": "object" + }, + { + "properties": { + "name": { + "description": "Unique state name (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "next_state": { + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "queries": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Search queries for user memory" + }, + "requested_information": { + "description": "Description of what to retrieve", + "type": [ + "string", + "null" + ] + }, + "type": { + "const": "recall", + "type": "string" + } + }, + "required": [ + "type", + "name", + "queries", + "requested_information", + "next_state" + ], + "type": "object" + }, + { + "properties": { + "inner_thought": { + "description": "Fixed inner thought injected into context", + "type": "string" + }, + "name": { + "description": "Unique state name (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "next_state": { + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "type": { + "const": "annotation", + "type": "string" + } + }, + "required": [ + "type", + "name", + "inner_thought", + "next_state" + ], + "type": "object" + }, + { + "properties": { + "audio_filler_triggered_after": { + "maximum": 10, + "minimum": 0, + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" + }, + "name": { + "description": "Unique state name (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "next_state": { + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "problem": { + "description": "Problem for the agent to reason about", + "type": "string" + }, + "tool_call_specs": { + "items": { + "properties": { + "additional_instruction": { + "description": "Extra context for the LLM when using this tool", + "type": "string" + }, + "audio_filler_triggered_after": { + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "result_persistence": { + "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", + "enum": [ + "ephemeral", + "persisted-preferred", + "persisted" + ], + "type": "string" + }, + "tool_id": { + "description": "24-char hex ID of the tool", + "type": "string" + }, + "version_constraint": { + "description": "Version constraint (e.g., \">=1\")", + "type": "string" + } + }, + "required": [ + "tool_id", + "version_constraint", + "additional_instruction", + "audio_fillers", + "audio_filler_triggered_after", + "result_persistence" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "const": "reflection", + "type": "string" + }, + "word_limit": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "type", + "name", + "problem", + "word_limit", + "next_state", + "tool_call_specs", + "audio_fillers", + "audio_filler_triggered_after" + ], + "type": "object" + }, + { + "properties": { + "designated_tool": { + "properties": { + "additional_instruction": { + "description": "Extra context for the LLM when using this tool", + "type": "string" + }, + "audio_filler_triggered_after": { + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "result_persistence": { + "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", + "enum": [ + "ephemeral", + "persisted-preferred", + "persisted" + ], + "type": "string" + }, + "tool_id": { + "description": "24-char hex ID of the tool", + "type": "string" + }, + "version_constraint": { + "description": "Version constraint (e.g., \">=1\")", + "type": "string" + } + }, + "required": [ + "tool_id", + "version_constraint", + "additional_instruction", + "audio_fillers", + "audio_filler_triggered_after", + "result_persistence" + ], + "type": "object" + }, + "designated_tool_call_context": { + "type": "string" + }, + "designated_tool_call_guidances": { + "items": { + "type": "string" + }, + "type": "array" + }, + "designated_tool_call_objective": { + "type": "string" + }, + "designated_tool_call_params_generation_audio_filler_triggered_after": { + "maximum": 10, + "minimum": 0, + "type": "number" + }, + "designated_tool_call_params_generation_audio_fillers": { + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" + }, + "designated_tool_call_validations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Unique state name (alphanumeric and underscores only)", + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "next_state": { + "pattern": "^[A-Za-z0-9_]+$", + "type": "string" + }, + "tool_call_specs": { + "items": { + "properties": { + "additional_instruction": { + "description": "Extra context for the LLM when using this tool", + "type": "string" + }, + "audio_filler_triggered_after": { + "type": "number" + }, + "audio_fillers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "result_persistence": { + "description": "ephemeral = current interaction only, persisted-preferred = kept if < 5000 chars, persisted = always kept", + "enum": [ + "ephemeral", + "persisted-preferred", + "persisted" + ], + "type": "string" + }, + "tool_id": { + "description": "24-char hex ID of the tool", + "type": "string" + }, + "version_constraint": { + "description": "Version constraint (e.g., \">=1\")", + "type": "string" + } + }, + "required": [ + "tool_id", + "version_constraint", + "additional_instruction", + "audio_fillers", + "audio_filler_triggered_after", + "result_persistence" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "const": "tool-call", + "type": "string" + } + }, + "required": [ + "type", + "name", + "next_state", + "designated_tool", + "designated_tool_call_objective", + "designated_tool_call_context", + "designated_tool_call_guidances", + "designated_tool_call_validations", + "designated_tool_call_params_generation_audio_fillers", + "designated_tool_call_params_generation_audio_filler_triggered_after", + "tool_call_specs" + ], + "type": "object" + } +]
- Changed
forge_metric_create2 fields changed- removed
Input schema / properties / additional_notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / additional_notes / typeAdded value: +[ + "string", + "null" +]
- Changed
forge_metric_update2 fields changed- removed
Input schema / properties / additional_notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / additional_notes / typeAdded value: +[ + "string", + "null" +]
- Changed
forge_scenario_create2 fields changed- removed
Input schema / properties / initial_version / properties / conversation_starts_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / initial_version / properties / conversation_starts_at / typeAdded value: +[ + "string", + "null" +]
- Changed
forge_unit_test_set_create2 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +[ + "string", + "null" +]
- Changed
forge_unit_test_set_update2 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +[ + "string", + "null" +]
37 tool updates
v0.1.13- First observed
forge_add_org - First observed
forge_agent_create - First observed
forge_agent_update - First observed
forge_context_graph_create - First observed
forge_context_graph_update - First observed
forge_conversation_evaluate - First observed
forge_conversation_insights - First observed
forge_dynamic_behavior_set_create - First observed
forge_dynamic_behavior_set_update - First observed
forge_entity_create - First observed
forge_entity_delete - First observed
forge_entity_get - First observed
forge_entity_list - First observed
forge_entity_update - First observed
forge_list_orgs - First observed
forge_metric_create - First observed
forge_metric_update - First observed
forge_persona_create - First observed
forge_persona_update - First observed
forge_remove_org - First observed
forge_scenario_create - First observed
forge_scenario_update - First observed
forge_service_create - First observed
forge_service_update - First observed
forge_set_org - First observed
forge_simulate - First observed
forge_smoke_test - First observed
forge_tool_create - First observed
forge_tool_update - First observed
forge_unit_test_create - First observed
forge_unit_test_set_create - First observed
forge_unit_test_set_update - First observed
forge_unit_test_update - First observed
forge_version_rollback - First observed
forge_version_set_list - First observed
forge_version_set_promote - First observed
forge_version_set_upsert
TDQS
Scored across 37 tools
Many entity-specific create/update tools (agent, context_graph, metric, etc.) overlap with the generic forge_entity_create/forge_entity_update, and the update semantics are inconsistent: some entity-specific updates create versions, others only edit metadata while pointing to forge_entity_update for version changes. This creates real ambiguity about which tool to call for a given change.
Most tools follow forge_<entity>_<action>, and all use snake_case, but org tools flip to forge_<action>_<entity> (list_orgs, set_org) and a couple are action-only (simulate, smoke_test). The inconsistency is noticeable but not chaotic.
37 tools is well above the 3-15 well-scoped range and even above the 16-25 heavy range; the generic entity_* CRUD layer plus per-entity create/update duplicates much of the surface. A more streamlined set would use either generic CRUD or specialized entity tools, not both.
Core resource lifecycle and testing/evaluation are covered, and entity_delete/get/list fill many gaps. However, unit test sets can be created but not executed, and tool versions are said to be 'published separately' with no corresponding tool, leaving notable dead ends.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for cross-platform agent onboarding. Registers external agents, translates intents from LangChain, CrewAI, AutoGen, and A2A formats, and proxies cross-ecosystem transactions.MIT
- AlicenseAqualityCmaintenanceMCP server that exposes RESTForge capabilities to AI agents, enabling them to set up, configure, generate code, and manage RESTForge projects through natural language.2944MIT

Agorus MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceMCP server for the Agorus AI agent marketplace, exposing API operations as tools for LLMs to discover, contract, and interact with agents and services.11MIT- FlicenseNot gradedqualityBmaintenanceMCP server for AI DevTool workflow, exposing tools and resources for code review, repository chat, and repository operations.1-