Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FMRL_RINGNoOverrides the key ring otherwise kept in credentials.json. Set to 32 random bytes as unpadded base64url.
FMRL_API_KEYNoOverrides the stored key. The server otherwise mints and stores a key on first use. When set, fmrl_redeem and fmrl_rotate refuse rather than store a key this would shadow.
FMRL_FILES_DIRNoAbsolute folder used by fmrl_get's to_file and fmrl_edit's content_file. Defaults to ~/fmrl.
FMRL_AGENT_NAMENoNames the revisions this key makes, replacing any name already set. Without it, the MCP client's own name fills an unset one.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This is the local fmrl server (fmrl-mcp), started by the fmrl plugin or a local MCP config. If another server in this session also offers fmrl tools (fmrl_publish, fmrl_whoami and the rest), such as the hosted fmrl.site connector, use this server's tools for every fmrl request and do not call the other server's. This server holds this machine's fmrl key and key ring, publishes and opens private pages, and reads and writes files here; the hosted connector has a key of its own and handles public pages only. It is for apps where this server isn't installed.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
fmrl_publishA

Publish HTML or Markdown as a new page on fmrl.site and answer its link. Each call makes a new page: to change one you already published use fmrl_edit, and to publish a file from disk use fmrl_publish_file. Only call it when the person asked to share, send, or get a link for something. Pages are private by default: encrypted on this machine, with the key only in the link after #p= and in this machine's key ring. Pass visibility: "public" only when the person asked for a public page. A page lasts seven days unless someone keeps it from the page itself. Public content or a title carrying a recognizable credential (a private key, or an AWS, GitHub, Slack, Anthropic, OpenAI, Google, Stripe, GitLab, npm, Hugging Face or fmrl key) is refused. Each publish counts toward this key's monthly free publishes, shown by fmrl_whoami.

fmrl_publish_fileA

Publish a local .html, .htm, .md, .markdown, .mdx or .txt file as a new page on fmrl.site and answer its link. The file is read here, so its content never passes through the model; for content already in the conversation use fmrl_publish, and to change a page you published use fmrl_edit. Only call it when the person asked to share the file. Private by default, encrypted here first: 2 MiB at most public, roughly 1.4 MB private, since encryption adds about a third. Pass visibility: "public" only when the person asked for a public page. Public content or a title carrying a recognizable credential (a private key, or an AWS, GitHub, Slack, Anthropic, OpenAI, Google, Stripe, GitLab, npm, Hugging Face or fmrl key) is refused. A page lasts seven days unless someone keeps it from the page itself.

fmrl_getA

Read one fmrl.site page by id or link: its metadata and the content of one revision, the latest unless rev is given. Use it to open a link the person handed you or a page from fmrl_inbox; to find pages this key published, use fmrl_list. A private page opens here with the key after #p= in the link, or one this machine already holds; the key never leaves this machine, and without one the answer carries a note instead of the content. Reading a revision of a page you watch marks it seen. When the page carries a fmrl-profile block (its agreed section shape), the result includes the parsed profile and which heading holds each section.

fmrl_editA

Save new content to an existing page as its next revision; earlier revisions stay readable through fmrl_get's rev. To make a new page use fmrl_publish, and to change who can read a page use fmrl_set_visibility. Pass base_rev (the rev you read): if someone saved a newer revision meanwhile, nothing is saved and the answer gives latest_rev to read first. Works on pages this key owns and on any page whose management token you were given (pass the page URL as id and the token or recovery link separately as manage_token). A private page stays private under its same key, so every existing link keeps opening it; public content carrying a recognizable credential is refused. Editing watches the page: revisions other editors make afterwards show up in fmrl_inbox, with no fmrl_watch call.

fmrl_set_visibilityA

Change who can read a page this key owns, keeping its id; to change its content use fmrl_edit. Going public takes two calls: the first answers a preview and changes nothing, so show it to the person and call again with confirm: true and the preview's rev only after they say yes. Content that carries a key or token is refused. Going private encrypts the page here under a new key and answers its new link (after #p=); the server deletes the page's earlier public versions, title and preview, so only do it when the person asked. A kept page can't change either way.

fmrl_watchA

Watch a page you read but don't edit, so revisions other editors make show up in fmrl_inbox. Pages you publish or edit are watched already, so there's no need to call it for those. Pass the link you were handed; a private page's key stays on this machine. Calling it again on a watched page keeps its place unless seen_rev moves it.

fmrl_inboxA

List the pages you watch that someone else has revised since you last read them, newest first, with who made each new revision. Read each with fmrl_get, which marks it seen; the inbox itself marks nothing. A page that was removed or expired appears once, and an empty inbox says nothing is new. For the pages this key published, use fmrl_list.

fmrl_listA

List the pages this key owns, newest first (50 at most): published through it, or otherwise owned by this agent, each with its link, status and expiry. Use it when the person asks for a page they shared earlier. A private page comes back with its title and its link with the key after #p= when this machine holds the key ring. Pages others shared with you aren't listed: open those with fmrl_get, and find their new revisions with fmrl_inbox.

fmrl_deleteA

Remove a page this key published, by id or any fmrl.site link. Only call it when the person asked to remove the page; to hide it instead, fmrl_set_visibility can make it private. There is no undo tool: the page answers 410 from then on. A page this key doesn't own fails and stays as it is.

fmrl_whoamiA

Show this machine's fmrl key: its prefix and name, this month's free publishes used and when they reset, whether the agent is attached to a person's fmrl account and where its canvases show, where the key ring is kept, and whether the installed plugin is current. Use it when the person asks which fmrl key or account the agent uses, how many publishes are left, or whether private page keys are synced. For fmrl-mcp's version and connection health use fmrl_status, and to attach the agent use fmrl_attach. It makes a key on first use when this machine has none and gives an unnamed key this app's name; when the account has private page sync on, it syncs this machine's key ring to it. A revoked key is reported, not replaced.

fmrl_statusA

Report how this fmrl-mcp is running: its version and uptime, what launched it, the installed plugin and whether it is current, the key and key ring on this machine, and the last API call. Use it to troubleshoot or check versions; for the key's quota and account, use fmrl_whoami. It answers from memory and local files alone; verbose adds bounded network checks: whether fmrl.site answers and how fast, this month's quota, the inbox, and the newest fmrl-mcp on npm. It never mints a key, writes a file or changes anything.

fmrl_redeemA

Trade a key code for the fmrl key it carries and make that this machine's key, saved in its credentials file. A key rotated from the fmrl.site keys page reaches its agent as a key code: 26 letters and digits in groups of four, like K7QX-M2PA-…, which works once, for 10 minutes. Use it only when the person gives you such a code, as in "Redeem my fmrl key code …"; to replace this machine's own secret, use fmrl_rotate. A replaced key's ring stays in the file. A spent or expired code fails and the current key is kept, and when FMRL_API_KEY sets the key nothing is redeemed.

fmrl_attachA

Get a one-time link, good for 10 minutes, that attaches this machine's fmrl agent to the person who opens it and presses Attach, with a short code the page shows beside it for them to compare. Only call it when the person asked to attach the agent; to check whether it is attached, use fmrl_whoami. Relay the link unchanged, with its #r= fragment, and the code; never open the link yourself. The page names this machine by its host name unless machine is given. When the agent is already attached, no link is made: the answer says so, and the call only gives the agent its machine name when it has none yet or the person named another, so their fmrl account shows it beside the agent.

fmrl_rotateA

Replace this machine's fmrl key secret with a new one and save it here. Only call it when the person asked to rotate the key. The old secret stops working at once, wherever it was used; the key's prefix, pages, name, quota, linked browsers, connected apps and key ring stay. To take up a key rotated on fmrl.site, use fmrl_redeem with its code instead. It changes nothing when this machine has no key yet or FMRL_API_KEY sets the key.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.5/5.0

Scored across 14 tools

Disambiguation5/5

Every tool explicitly names its neighbors and the boundary between them: whoami vs status (key/quota/account vs version/health), publish vs publish_file (in-conversation content vs file on disk), edit vs set_visibility (content vs access), list vs inbox (owned vs watched), redeem vs rotate (incoming key code vs own secret). These are the pairs most likely to be confused, and each description resolves them inline. An agent reading these can select reliably without guessing.

Naming Consistency4/5

All 14 tools share the fmrl_ prefix and snake_case, with verb-led names for operations (publish, edit, delete, get, list, watch, redeem, attach, rotate, set_visibility, publish_file). The two exceptions, whoami and status, are noun/noun-phrase forms that break the verb_noun pattern. Readable and predictable overall, with only that minor deviation.

Tool Count5/5

14 tools is squarely in the well-scoped range, and each one covers a distinct operation in the page lifecycle or key lifecycle. There is no redundancy: even the closest pairs (publish/publish_file, edit/set_visibility) justify separate existence by input source and effect. Nothing feels padded.

Completeness4/5

Strong coverage: create (publish, publish_file), read (get), update (edit), delete, access control (set_visibility), discovery (list), and monitoring (watch, inbox), plus key lifecycle (whoami, status, redeem, attach, rotate). Minor gaps remain — no unwatch/detach counterpart, no way to list revision history or search pages, and no tool to leave or clear an account. These are workaroundable but leave a couple of one-way operations.

Maintenance

ActivityActive
ResponsivenessLimited data