Add an MCP server
Ship an MCP server inside a plugin to give the agent live tools or data, not just instructions.
Last updated
Ship an MCP server inside a plugin to give the agent live tools or data, not just instructions.
Takeaway Bundle an MCP server in a plugin when the agent needs a live capability, a tool or a data source, rather than instructions. Declare it in a .mcp.json at the plugin root; on install, Tessl materializes it into each agent's native MCP config.
A skill gives an agent instructions. An MCP (Model Context Protocol) server gives it a tool or data at runtime: query an internal feature-flag service, look up your component library, fetch a live API schema from staging. Add one only when the plugin genuinely needs a capability the agent does not already have. If the job is "tell the agent how to do X", that is a skill, not an MCP server.
This is also available through your agent: tessl install tessl/plugin-creator
Point the manifest at a bundled .mcp.json file:
{
"mcpServers": ".mcp.json"
}The value is the literal ".mcp.json" or "./.mcp.json". Declaring it is optional: the file is discovered by convention at the plugin root either way, so the field just lets you be explicit. The file declares the servers the plugin ships, in two transports:
{
"mcpServers": {
"feature-flags": {
"type": "http",
"url": "https://flags.internal.engteam.example/mcp"
},
"schema-linter": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@engteam/schema-linter-mcp"]
}
}
}http - a remote server at a URL (http or https), with optional headers.
stdio - a local server Tessl launches, with a command and optional args and env.
Do not hard-code secrets in .mcp.json. If a server needs credentials, reference them from the environment rather than committing them.
Each agent configures MCP servers in its own way, and that is exactly the work Tessl does for you. When someone installs the plugin, Tessl reads the bundled .mcp.json and writes the servers into each agent's own MCP configuration, adapting the shape to that agent. A server declared once is available in Claude Code, Cursor, and other supported agents, without the author writing per-agent config.
Lint the plugin, then confirm the servers materialize by installing into a throwaway project and checking the agent's MCP config:
For the local development loop, see Develop and test locally.
Create a plugin - the plugin that holds the server.
Develop and test locally - install and confirm the server appears.
Publish and update - share the plugin once the server works.
Last updated
tessl plugin lint ./api-conventions
tessl install file:./api-conventions
