MCP server core for the BEAM. Elixir, Apache-2.0, dual-era 2026-07-28 and 2025-11-25.
A Model Context Protocol server core for the BEAM. Protocol handling, two transports — stdio and a stateless Streamable HTTP Plug — and JSON Schema validation, with the tool catalog and the dispatch function injected by the host.
The package holds no tools, no domain, and no policy. It decides what a well-formed request is and refuses one that is not; what a tool does is the host's business.
~ 0.3.0, not the more usual ~ 0.3. While this package is 0.x it documents wire breaks at the minor position, and it has used that position twice: 0.2.0 removed two fields from results for legacy-declared requests, and 0.3.0 adds the HTTP transport and the ttlMs/cacheScope fields 2026-07-28 requires on tools/list. ~ 0.3 admits 0.4.0, so it would carry you across the next such break on a routine mix deps.update; ~ 0.3.0 does not. The tighter form is deliberate and is not an over-pin to be tidied away.
Injection without a specification is a claim with nothing behind it, so both are declared.
BeamMCP.ToolCatalog — the host names the tools.
The dispatch callback — the host does the work.
:toolcatalog is required. :dispatch is required for tools/call. :servername defaults to beammcp, and a host that wants its own name in initialize says so.
A tool's schema lives on its ToolSpec. tools/list advertises that schema and tools/call enforces that schema, so the contract a client is shown and the contract it is held to cannot drift apart. Argument keys are derived from the schema's properties and reach dispatch as atoms — a tool declaring "place" is dispatched %{place: "Oslo"}, not %{"place"
From the project README.
Add the radar badge to your README — it shows your project was picked up by MCP Radar and links to this page:
[](https://mcp.liqiwa.com/s/ScriptKittyOS--beam_mcp.html)
The top new MCP servers of the week, every Monday. No spam, unsubscribe anytime.