SB

scriptkittyos/beam_mcp

开发工具

本页由 AI 翻译,技术细节请以原文为准。 查看原文

6 stars 3 forks 质量 61 趋势 34Apache-2.0

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. While this package is 0.x it documents breaks at the position, and it has used that position five times: 0.2.0 removed two fields from results for legacy-declared requests, 0.3.0 added the HTTP transport and the ttlMs/cacheScope fields 2026-07-28 requires on tools/list, 0.4.0 replaced the catalog behaviour a host implements (BeamMCP.ToolCatalog by BeamMCP.Catalog), a break in the host contract rather than on the wire, and 0.5.0 reads a request's _meta at params.

README

以下为原文 README 节选,完整内容请查看原文。

BeamMCP

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.

def deps do
  [{:beam_mcp, "~> 0.10.0"}]
end

~> 0.10.0, not the more usual ~> 0.10. While this package is 0.x it documents breaks at the minor position, and it has used that position five times: 0.2.0 removed two fields from results for legacy-declared requests, 0.3.0 added the HTTP transport and the ttlMs/cacheScope fields 2026-07-28 requires on tools/list, 0.4.0 replaced the catalog behaviour a host implements (BeamMCP.ToolCatalog by BeamMCP.Catalog), a break in the host contract rather than on the wire, and 0.5.0 reads a request’s _meta at params._meta and refuses it at the top level (on the wire), renames the one sign the package writes and moves schema_version to 2 (in the exported bytes), and requires a catalog’s resources and prompts lists to hold the package’s structs (the host contract), and 0.6.0 names the canonical envelope’s algorithm in its bytes and moves schema_version to 3 (in the exported bytes), each with a how-to-tell sentence in the changelog (0.7.0 is an addition at the minor, the signer seam; 0.8.0 a quiet minor in which no public entry moved; 0.9.0 two additions at the minor, the :server seam and the scheme beside the signature; 0.10.0 a quiet minor again; none a break). ~> 0.10 would admit a 0.11.0, so it would carry you across the next such break on a routine mix deps.update; ~> 0.10.0 does not. The tighter form is deliberate and is not an over-pin to be tidied away. What the pin buys is written down: docs/api-stability.md says what is public (what ex_doc lists, docs/public-api.txt line by line), how a deprecation runs (three steps, three minors), and what a 0.x break must say; a census holds the surface to that record. UPGRADING.md lists every break so far, one line each, and what 1.0 will ask.

From 0.6.0, the tarball is attested, and the attestation binds to the checksum hex.pm shows. On a release tag, CI builds the tarball with tools/release_tarball.sh, the one way that gives the same bytes on every machine (mix hex.build on a working tree carries that machine’s file modes and directory order), attests its SHA-256 with GitHub’s build-provenance attestation, and verifies the attestation against the bytes hex.pm serves. A

在 GitHub 查看完整 README

安装

This server does not publish a one-line install command.

Open the repository installation guide 新手?先看 mcpskill.org 教程 →