Agent Tools

Add connected MCP server tools to your agents so they can interact with external services.


Adding via the UI

  1. Open your agent's settings → Tools tab
  2. Click Add ToolConnector Tool
  3. Select a connected MCP server
  4. Choose which tools to expose to the agent

The agent sees each tool with its name, description, and input schema — just like any other tool.


Adding via YAML

In your agent's YAML config, add tools with type: mcp:

yaml
1tools:2  - name: list_issues3    type: mcp4    description: List Linear issues with filtering5    mcp:6      integration_id: "integ_abc123"7      tool_name: "list_issues"89  - name: create_issue10    type: mcp11    description: Create a new Linear issue12    require_approval: true13    mcp:14      integration_id: "integ_abc123"15      tool_name: "create_issue"
FieldDescription
integration_idYour team's integration ID for the MCP server
tool_nameThe tool name as listed by belt mcp tools <slug>

Finding Your Integration ID

After connecting to a server (belt mcp connect), find the integration ID:

bash
1belt integrations list2belt integrations get mcp:mcp.linear.app --json   # id field in JSON output

Or via the web UI under team settings → integrations.

belt app integrations list lists app capability keys for inf.yml (for example google.sheets) — not team connection IDs. Use belt integrations list for connected services.


Tool Schema and Description

When an agent loads a connector tool, the runtime resolves the name, description, and input schema the LLM sees:

StepSourceWhen it applies
1. Cached schemaIntegration metadata from connect timeDefault — populated when you connect via belt mcp connect, the workspace, or POST /integrations
2. Live fetchMCP server tools/listCache is missing or the tool was added after connect
3. Generic fallbackSingle arguments objectCache and live fetch both fail (unreachable server, legacy integration without a server URL)

Description — The description on your agent tool overrides the MCP server's tool description. If you omit it, the runtime uses the server's description from the cached or live tool definition.

JSON Schema dialect

MCP tool inputSchema values are JSON Schema documents. Per the MCP specification (rev 2025-11-25, SEP-1613), schemas that omit "$schema" default to JSON Schema 2020-12. When a tool declares an explicit "$schema" (for example draft-07), inference shell parses the schema under that dialect.

When converting MCP schemas to the typed parameters agents and belt mcp tools display, the platform resolves array items across dialects — including 2020-12 single-schema arrays and draft-07 tuple forms.

Troubleshooting

If an agent tool shows a generic arguments parameter instead of typed fields, or array parameters look like untyped object[] instead of the element type the MCP server defines, reconnect the MCP integration (belt mcp connect <slug>) so the platform can refresh cached tool schemas.


How It Works at Runtime

  1. Agent decides to call the tool based on the conversation
  2. Runtime loads your team's integration credentials
  3. Opens a fresh MCP session to the remote server
  4. Calls the tool with the agent's arguments
  5. Returns the result to the agent

Credentials are never exposed to the agent. Each tool call gets a fresh session — no state leaks between calls.


Require Approval

For destructive operations (creating issues, sending messages, deleting records), enable require_approval:

yaml
1- name: send_slack_message2  type: mcp3  description: Send a message to a Slack channel4  require_approval: true5  mcp:6    integration_id: "integ_xyz789"7    tool_name: "send_message"

The agent pauses and waits for user confirmation before executing.


Example: Triage Agent

An agent that reads Linear issues and posts summaries to Slack:

yaml
1name: triage-agent2description: Summarizes new Linear issues and posts to Slack3core_app:4  ref: openrouter/claude-sonnet-455system_prompt: |-6  You triage incoming Linear issues. For each new issue:7  1. Read the issue details8  2. Categorize by severity and area9  3. Post a summary to the #triage Slack channel10tools:11  - name: list_issues12    type: mcp13    description: List recent Linear issues14    mcp:15      integration_id: "integ_linear"16      tool_name: "list_issues"1718  - name: get_issue19    type: mcp20    description: Get full issue details21    mcp:22      integration_id: "integ_linear"23      tool_name: "get_issue"2425  - name: post_to_slack26    type: mcp27    description: Post a message to Slack28    require_approval: true29    mcp:30      integration_id: "integ_slack"31      tool_name: "send_message"

SDK Builders

Python

python
1from inferencesh import mcp_tool23list_issues = (4    mcp_tool("list_issues", "integ_abc123", "list_issues")5    .describe("List Linear issues with filtering")6    .build()7)89create_issue = (10    mcp_tool("create_issue", "integ_abc123", "create_issue")11    .describe("Create a new Linear issue")12    .require_approval()13    .build()14)

JavaScript

typescript
1import { mcpTool } from '@inferencesh/sdk';23const listIssues = mcpTool('list_issues', 'integ_abc123', 'list_issues')4  .describe('List Linear issues with filtering')5  .build();67const createIssue = mcpTool('create_issue', 'integ_abc123', 'create_issue')8  .describe('Create a new Linear issue')9  .requireApproval()10  .build();

Next

  • MCP Server — use inference shell as an MCP server for Claude Code and Cursor
  • Adding Tools — all agent tool types

we use cookies

we use cookies to ensure you get the best experience on our website. for more information on how we use cookies, please see our cookie policy.

by clicking "accept", you agree to our use of cookies.
learn more.