MCP servers
TAI speaks Model Context Protocol natively. Declare a server in config.yaml and its tools join the registry alongside the built-ins: agents pick them by name, the loop calls them like any other tool, and config edits reconcile without a restart.
This is the fastest way to add integrations. Notion, Linear, GitHub, Slack, and thousands of other services ship MCP servers. Connecting one takes a config block, not a plugin.
Connect a server
mcp:
servers:
github:
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
tools: [search_issues, get_issue]
command starts a local server over stdio. TAI spawns the process, keeps it alive, and shuts it down with the runtime. For remote servers, use url instead:
mcp:
servers:
internal:
url: https://mcp.example.com/mcp
headers:
Authorization: Bearer ${MCP_TOKEN}
Each server takes exactly one of command or url. The fields match the mcpServers JSON shape used across the MCP ecosystem, so a server's published config copy-pastes straight in. ${VAR} references resolve from your environment, same as everywhere else in config.yaml.
Use the tools
Discovered tools register as mcp_<serverId>_<toolName>. Reference them in an agent's tool list:
agents:
triage:
tools: [read, mcp_github_search_issues, mcp_github_get_issue]
Keep the exposed set small. Local models pick reliably from about five tools, and a 30-tool server exposed wholesale will sink tool selection. Two knobs control this: the per-server tools: allowlist trims what TAI discovers, and the per-agent tools: list trims what each agent sees.
If a referenced MCP tool isn't available yet, the agent starts without it and logs a warning instead of failing. Servers connect asynchronously; the loop re-resolves tools every iteration, so the tool joins the agent's set the moment discovery lands.
Lifecycle
TAI reconciles running servers against config the same way it reconciles channels. Add a server and it connects on the next reload. Change its config and it restarts with the new settings. Remove it and its tools disappear from the registry. A server that fails to connect is logged and retried on the next reconcile, and never blocks startup.
Servers that emit tools/list_changed notifications get their tool set re-discovered live.
Notes
- The MCP SDK is an optional dependency of
@tailored-ai/core. npm installs it by default; if it's missing, connecting fails with an install hint and nothing else is affected. - Tools only for now. MCP resources, prompts, and sampling aren't consumed yet.
- Tool results flatten to text. Image and audio blocks become short markers.
- Transports: stdio and streamable HTTP. The deprecated HTTP+SSE transport isn't supported.