Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 36 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,43 @@ All notable changes to this project are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [0.1.1] — unreleased

Nothing is published yet. The sections below describe what a first release would contain.
### Fixed

- **`BeamMCP.Server` is documented.** It carried `@moduledoc false`, so hexdocs rendered the
package's principal module as hidden and the two warnings below were emitted on every build.

### Was known, now fixed

**Two hexdocs warnings**, reproduced by running `mix docs` rather than taken from the publish
output:

warning: documentation references module "BeamMCP.Server" but it is hidden
warning: documentation references module "BeamMCP.Server" but it is hidden

`BeamMCP.Server` carries `@moduledoc false` — inherited verbatim from the tree it was extracted
from, where it was an internal module and the annotation was correct. It is now the package's
principal public module, and `BeamMCP.ToolCatalog`'s docs link to it, so the published docs
reference a module hexdocs will not render. The annotation stopped being true the moment the
code left the umbrella, and nothing caught it because a hidden module is not a compile warning
and the gate does not run `mix docs`.

## [0.1.0] — 2026-09-06

First release. Tag `v0.1.0`, an annotated tag whose object is `69c8159` and whose commit is
`2add129e65d04759ce67c77520208b854c05dcee`.

**Package digest, read from the Hex API rather than from a terminal:**

$ curl -s https://hex.pm/api/packages/beam_mcp/releases/0.1.0 | jq '{checksum, inserted_at, has_docs}'
checksum: b8c351933260d90844eae1614ae4759cf979d4a524ee139fbbef1c2dfaab5e7f
inserted_at: 2026-09-06T20:57:51.749883Z
has_docs: true
requirements: ["jason"]

The registry's own value is the one recorded, because a checksum printed by the machine that
built the tarball attests to that machine and not to what a consumer will fetch.

### Why 0.1.0 was not published at `c5da02f`

Expand Down
28 changes: 27 additions & 1 deletion lib/beam_mcp/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,33 @@
defmodule BeamMCP.Server do
alias BeamMCP.Schema

@moduledoc false
@moduledoc """
The protocol core: one message in, one response out, no process and no state of its own.

`handle_message/2` takes a decoded JSON-RPC message and the state from `new/1`, and returns
the next state and a response — or `nil` where the protocol defines no reply. A transport
supplies the bytes; this module never touches them.

## Two eras

It serves `2026-07-28` and `2025-11-25`, and tells them apart the way the specification says
a dual-era server should: a request carrying per-request `_meta` is served statelessly under
the modern revision, and an `initialize` request selects legacy semantics. A request naming
a revision it does not support gets `UnsupportedProtocolVersionError` (`-32022`) listing
what it does.

## What the host supplies

BeamMCP.Server.new(
tool_catalog: MyApp.Catalog, # required, a BeamMCP.ToolCatalog
dispatch: &MyApp.Dispatch.call/3, # required for tools/call
server_name: "my-app" # optional, defaults to "beam_mcp"
)

The server holds no catalog and executes nothing. It advertises the schema a tool's
`BeamMCP.ToolSpec` carries and enforces that same schema on the call, so what a client is
shown and what it is held to cannot drift apart.
"""

alias BeamMCP.ToolSpec

Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
defmodule BeamMCP.MixProject do
use Mix.Project

@version "0.1.0"
@version "0.1.1"
@source_url "https://github.com/ScriptKittyOS/beam_mcp"

def project do
Expand Down
Loading