Calliope MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Calliope MCP Serverread the body of node 'my-note'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@forge/calliope
Calliope — the node-body prose editor. "clotho for prose": a ProseMirror editor over the urania substrate, the Obsidian replacement.
One urania substrate, two peer facets:
Clotho — the work/graph facet (board-mcp replacement). Never touches bodies.
Calliope (this repo) — the body/prose facet. Talks to the substrate directly (urania capture via the Hades gate); not through clotho.
Tantalus — the render surface for Clotho's graph; imports Calliope's editor for body text.
Body model
A node's body is stored as substrate triples — no blocks, no arrangements:
note --hasPart--> section # node edge
section : hasType "section" # a placement id (not content-addressed)
section --text--> "<prose>" # literal; interned content-addressed
section --order_key--> "<key>" # fractional key, sorted COLLATE "C"Reading a body resolves the note's hasPart section targets, resolves each to
{ text, order_key }, and sorts by order_key. Edits are copy-on-write:
changed prose mints a new version node that supersedes the old; hasPart is
rewired.
Related MCP server: Yandex Wiki MCP
Public API
type Section = { id: string; text: string; orderKey: string };
type SectionInput = { text: string }; // position = array order
interface BodyClient {
readBody(nodeId: string): Promise<Section[]>;
saveBody(nodeId: string, sections: SectionInput[]): Promise<void>;
}
function NodeBodyEditor(props: {
nodeId: string;
client: BodyClient;
readOnly?: boolean;
onSaved?: () => void;
}): JSX.Element;
class FixtureBodyClient implements BodyClient; // in-memory; ships now
class UraniaBodyClient implements BodyClient; // substrate-direct; live wire deferredClients
FixtureBodyClient— in-memory, fully working. Default for standalone dev and for Tantalus today.UraniaBodyClient— substrate-direct (urania capture via Hades). The body-model mapping (copy-on-writehasPart/text/order_key) is real; the live transport is deferred, guarded behindCALLIOPE_URANIA_WIREDand an injectedUraniaCapture, exactly like Tantalus's current clotho swap-seam.
MCP server
The prose facet is also an MCP server exposing four tools (read_body,
write_body, append_section, edit_section) over the same backend selection
(UraniaBodyClient live by default — URANIA_URL, internal-net
http://urania:8202; CALLIOPE_MCP_BACKEND=fixture for a standalone server).
Two transports, one shared tool set:
stdio —
calliope-mcpbin (dist/mcp/main.js); for Tantalus + local use.streamable-HTTP —
calliope-mcp-httpbin (dist/mcp/http.js,pnpm start:http); servesPOST /mcpon$PORT(else$CALLIOPE_MCP_PORT, else 8204). This is the constellation star form: the Hades MCP gateway fronts it east-west athttp://calliope-mcp:8204/mcp. Stateless — a fresh server+transport per request over a long-lived backend.
Deploy (nas01 star)
compose.yaml + Dockerfile + .forgejo/workflows/deploy.yml ship the HTTP
star to nas01: container/hostname calliope-mcp on the external mnemosyne-net,
internal-only (no host port), reaching urania at URANIA_URL=http://urania:8202.
Push to main runs the gate (format/lint/typecheck/test/build) then builds,
pushes to the Forgejo registry, and recreates the container. Joining the
constellation is one line in the gateway's hades.toml [stars] table
(calliope = "http://calliope-mcp:8204/mcp") + a Hades restart.
Develop
pnpm install
pnpm lint
pnpm typecheck
pnpm test
pnpm buildThe package builds to dist/ (ESM + .d.ts). A consumer links it with
file:../calliope.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/robfischer1/calliope'
If you have feedback or need assistance with the MCP directory API, please join our Discord server