Skip to content

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).

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 mcp MCP-protocol CHECK verb (the go-sdk CLIENT). Since the schema-compaction cutover an authored mcp: 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/execs charly <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: --stdio serves the editor/LLM integration over stdin/stdout, --listen serves 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.