charly mcp
| Served by | plugin-mcp |
| Placement | runtime (out-of-process over gRPC) |
| Version | 2026.178.1430 |
mcp is a command word served by the plugin-mcp plugin candy. This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).
About the plugin that serves it
Section titled “About the plugin that serves it”OUT-OF-TREE charly plugin serving TWO MCP capabilities — a standalone Go module (go.mod + main.go) that speaks the Model Context Protocol over go-plugin gRPC via the charly plugin SDK (github.com/opencharly/sdk). charly’s loader fetches this candy’s repo, go-builds the provider binary on the HOST, and serves it OUT-OF-PROCESS via LocalTransport, so the github.com/modelcontextprotocol/go-sdk library lives HERE, out of charly’s core:
-
verb:mcp — the
mcpMCP-protocol CHECK verb (the go-sdk CLIENT). Since the schema-compaction cutover an authoredmcp:step desugars to the internal plugin/plugin_input envelope, and every mcp-exclusive modifier (method/mcp_name/tool/uri/input) lives in the plugin’s OWN #McpInput (schema/mcp.cue); the verb dispatches through the provider registry exactly like a built-in (ResolveVerb → grpcProvider → invokeVerbProvider). The plugin resolves the declared mcp_provides (cc.ResolveImageLabel) + the picked, host-routable dial endpoint (cc.ResolveEndpoint) via the generic reverse-legs (the host owns the podman / OCI-label / port-mapping machinery) — so this plugin needs no container inspection. Full 7-method surface (ping/servers/list-tools/list-resources/list-prompts/call/read). -
command:mcp —
charly mcp …(the go-sdk SERVER), the externalized MCP bridge ported out of charly’s core (the deleted charly/mcp_server.go; the C1 dep-shed that removes go-sdk from the core binary entirely). It builds the tool surface from the host CLI MODEL (charly __cli-model→ sdk.CLIModel) and fork/execscharly <cmd>per tool call — the host stamps CHARLY_BIN with the spawning binary. charly DISPATCHES the command by fork/exec’ing this binary in CLI mode (sdk.Main → cliMain), so it owns real terminal stdio:--stdioserves the editor/LLM integration over stdin/stdout,--listenserves Streamable HTTP (the in-container supervised deployment).
verb:mcp is served over gRPC (the provider registry); command:mcp is served
via the CLI fork/exec path — so command:mcp is declared in plugin.providers
(for the CLI-grammar prescan + baked manifest) but NOT advertised in Describe.
The R10 consumer is an MCP-providing pod bed whose check composes this plugin
(e.g. jupyter / chrome-devtools-mcp) plus the charly-mcp candy that runs
charly mcp serve.
Run charly mcp --help for the live flag grammar.