fmrl
fmrl-mcp lets an agent publish, read, edit, watch, and manage shareable web pages on fmrl.site — private and client-side encrypted by default.
Publish pages: send HTML/Markdown (
fmrl_publish) or an.html/.md/.txtfile (fmrl_publish_file); get back a link, manage link, and expiry. Private by default (encrypted locally, key after#p=); public only on request.Read pages:
fmrl_getfetches a page or specific revision by id/URL, decrypts private pages locally, and can write content to a local file instead of returning it.Edit pages:
fmrl_editsaves a new revision with optimistic concurrency (base_rev), for owned pages or ones with a manage token; editing auto-watches the page.Collaborate:
fmrl_watchfollows pages for others' revisions,fmrl_inboxlists watched pages changed since last read.Manage:
fmrl_listlists pages owned by the key;fmrl_deleteremoves a page;fmrl_set_visibilityflips public/private (with preview + confirm before public).Account & keys:
fmrl_attachgives a one-time link to attach the agent to a person's fmrl account;fmrl_redeemtrades a key code for a key;fmrl_rotatereplaces the key secret.Inspect:
fmrl_whoamishows key prefix, monthly quota (25 publishes), attachment state, and plugin freshness;fmrl_statusreports versions, key location, last API call, and optional network/quota/npm checks.
fmrl
Your agent's outbox. Ask it to publish to fmrl and get a shareable link to your page, no account required. Agents and people can edit and organize canvases together. Pages expire on their own unless you keep them, and private ones are encrypted before they leave your device.
This repository holds the fmrl plugin for Claude Code and Cursor, and fmrl-mcp, the MCP server behind it that works in any MCP client.
Install
Claude Code
/plugin marketplace add toogreatwtf/fmrl-plugin
/plugin install fmrl@fmrl-pluginKeep it current: auto-update is your switch, under /plugin → Marketplaces → fmrl-plugin → Enable auto-update, and the plugin offers once to turn it on. In the Claude desktop app the switch does nothing: update by hand, or when the plugin says it is out of date. By hand, run claude plugin marketplace update fmrl-plugin, then claude plugin update fmrl@fmrl-plugin, and restart Claude Code.
Cursor
Open Customize, then Plugins, choose Add and Import Marketplace, paste https://github.com/toogreatwtf/fmrl-plugin as the repository (the full address, not owner/repo), and add fmrl.
Any MCP client (Claude Desktop, Codex, Windsurf and the rest)
{ "mcpServers": { "fmrl": { "command": "npx", "args": ["-y", "fmrl-mcp"] } } }There's no sign-up or key to paste. The server makes a key the first time it publishes.
Related MCP server: aamio
Use it
Ask your agent to share something: "publish this report to fmrl". You get back a link, when the page expires, and a manage link for editing it later.
Pages are private by default: encrypted on your machine, readable by anyone you give the full link, but not by fmrl.site. A page lasts seven days unless someone keeps it from the page itself, and a kept private page stays encrypted.
In Claude Code and Cursor, the plugin adds four skills:
/fmrl:share: publish a file or something the agent wrote, and reply with the link./fmrl:attach: connect this agent to your fmrl account, so its pages show up in your canvases./fmrl:whoami: your key, this month's publishes, and whether the plugin is up to date./fmrl:status: a quick health check;/fmrl:status verbosealso checks fmrl.site and npm.
Tools
Any MCP client gets fourteen tools:
Tool | Does |
| Publish content as a page and return its link. |
| Publish an HTML, Markdown or text file from disk. |
| Read a page, or one revision of it. |
| Save a new revision of a page you own or were given a manage link for. |
| Follow a page so other people's edits show up in your inbox. |
| List watched pages that someone else has changed. |
| List the pages this key published. |
| Make a page public or private, with a preview before anything goes public. |
| Delete a page this key published. |
| Get a one-time link that connects this agent to your fmrl account. |
| Show the key, this month's quota and attachment state. |
| Show versions, the key on this machine and the last API call. |
| Trade a key code from fmrl.site for its key. |
| Replace the key's secret. |
Arguments and edge cases for each tool are in docs/tools.md.
Keys and limits
Your key and key ring live in ~/.config/fmrl/credentials.json (%APPDATA%\fmrl\credentials.json on Windows). Back that file up: it holds the keys to every private page you've published.
Each key gets 25 publishes a month, and a page can be up to 2 MiB (about 1.4 MB for a private page). Content follows fmrl.site's acceptable use policy.
More
Configuration, keys and files: environment variables, where things are stored, and using the API with curl.
Account vault ring sync: how key rings are backed up to your fmrl account.
API reference on fmrl.site.
Contributing and releasing.
License
MIT, Too Great LLC.
Available Tools
14 toolsfmrl_attachAttach this agent to a person's fmrl accountA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| machine | No | The machine name to show on the page; defaults to this computer's host name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | The code fmrl.site shows beside the link, for the person to compare. |
| machine | No | The machine name the link carries, as fmrl.site cleaned it. |
| renamed | No | Already attached: true when this call gave the agent its machine name, so the person's account now shows it; false when that update failed. Absent when the name was already right. |
| attached | Yes | True: this agent is already attached and nothing was minted. |
| attach_url | No | The one-time link, with the key ring when available. Relay it unchanged. |
| expires_at | No | |
| attached_at | No | |
| attached_via | No | |
| canvases_url | No |
fmrl_deleteRemove a fmrl.site pageADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The page id, or any fmrl.site link to the page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| removed | Yes |
fmrl_editEdit a fmrl.site pageA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A page id or page URL, optionally with its private key (#p=). Supply recovery separately as manage_token. | |
| title | No | Page title; for a private page it titles the encrypted document only. | |
| format | No | html or md; leave out to let the server detect it, or, with content_file, to take it from the extension. A private page is always sent as HTML, rendered here from Markdown. | |
| content | No | The page's new HTML or Markdown: 2 MiB at most on a public page, roughly 1.4 MB on a private one. Give this or content_file, not both. | |
| base_rev | No | The revision you read and are editing from; the edit fails if someone saved a newer one. | |
| content_file | No | Read the new content from this page's own file instead, so a large page never passes through the model: write it with fmrl_get's to_file, edit the file, save it from there. Only <id>.md or <id>.html (or .htm, .markdown, .mdx, .txt) in the fmrl folder (~/fmrl unless FMRL_FILES_DIR says otherwise) is read, where <id> is this page's id: give its file name or its full path. 2 MiB at most. | |
| manage_token | No | A 22-character recovery token or /c/<token> link for this page. It grants management, not deletion, and is used only with the edit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| rev | No | |
| url | No | |
| watching | No | |
| latest_rev | No |
fmrl_getRead a fmrl.site pageAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A page id or page URL, optionally with its private key (#p=). A /c/ recovery link is not a page URL. | |
| rev | No | The revision to read; the latest when left out. | |
| to_file | No | true: write the content, as it reads after opening, to <id>.md or <id>.html in the fmrl folder (~/fmrl unless FMRL_FILES_DIR says otherwise) instead of returning it, and answer with that file's path. It replaces an earlier copy of the same page. For a large page, or one you will edit and save back with fmrl_edit's content_file. The file is readable only by this user. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| cid | No | |
| rev | Yes | |
| url | Yes | |
| size | Yes | |
| title | No | |
| editor | Yes | |
| format | Yes | |
| pinned | Yes | |
| status | Yes | |
| content | No | |
| missing | No | |
| private | Yes | |
| profile | No | |
| key_held | No | |
| expires_at | Yes | |
| latest_rev | Yes | |
| section_map | No | |
| content_file | No | |
| content_note | No | |
| profile_error | No | |
| content_format | No |
fmrl_inboxPages revised since you read themARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
fmrl_listList this key's fmrl.site pagesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| docs | Yes |
fmrl_publishPublish a page to fmrl.siteA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Page title; the first heading is used when left out. For a private page the server stores no title; when the content is rendered from Markdown the encrypted document's own title uses it (falling back to the first heading), and raw HTML is sealed as-is. | |
| format | No | html or md; leave out to let the server detect it. | |
| content | Yes | The HTML or Markdown to publish: 2 MiB at most public; private pages are encrypted first, so roughly 1.4 MB fits. | |
| private | No | Older form of visibility: true is private, false is public. Prefer visibility. | |
| visibility | No | private (the default): encrypted here before upload; the link carries the key after #p=, the page has no title or preview on fmrl.site, and opens only with that key. public: anyone with the link can read it, and it shows a title and preview. Either can be kept from the page itself. Pass public only when the person asked for a public page, after showing them what will be shared. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| notes | No | |
| status | Yes | |
| raw_url | Yes | |
| link_url | No | |
| recovery | No | |
| attach_url | No | |
| expires_at | Yes | |
| manage_url | Yes |
fmrl_publish_filePublish a file to fmrl.siteA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file (a leading ~ is expanded). | |
| title | No | Page title; the file's first heading is used when left out. For a private page the server stores no title; when the content is rendered from Markdown the encrypted document's own title uses it (falling back to the first heading), and raw HTML is sealed as-is. | |
| private | No | Older form of visibility: true is private, false is public. Prefer visibility. | |
| visibility | No | private (the default): encrypted here before upload; the link carries the key after #p=, the page has no title or preview on fmrl.site, and opens only with that key. public: anyone with the link can read it, and it shows a title and preview. Either can be kept from the page itself. Pass public only when the person asked for a public page, after showing them what will be shared. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| notes | No | |
| status | Yes | |
| raw_url | Yes | |
| link_url | No | |
| recovery | No | |
| attach_url | No | |
| expires_at | Yes | |
| manage_url | Yes |
fmrl_redeemRedeem a fmrl.site key codeADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The key code, as given; dashes, spaces and case don't matter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| prefix | Yes | |
| replaced | No |
fmrl_rotateRotate this fmrl.site keyADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| prefix | Yes | |
| replaced | No | |
| rotated_at | Yes |
fmrl_set_visibilityMake a fmrl.site page public or privateADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A page id or page URL; a private page going public needs its key (#p=) in the link, or one this machine already holds. | |
| rev | No | With confirm: true, the revision number the preview answered. If the page has changed since, nothing is made public. | |
| confirm | No | true: make a private page public now, after the person said yes to its preview. Leave out the first time; going private needs no confirm. | |
| visibility | Yes | Who can read the page after the change: public (anyone with the link) or private (only links that carry the new key). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| rev | No | |
| url | Yes | |
| title | No | |
| changed | Yes | |
| preview | No | |
| visibility | Yes | |
| content_format | No |
fmrl_statusThis fmrl-mcp's statusARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | Add the network checks: reachability, quota, inbox and npm. Each is bounded, so the answer takes a few seconds at most. |
fmrl_watchWatch a fmrl.site pageAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A page id or any fmrl.site link for it; a private page's key (#p=) is remembered here once it opens the page. | |
| seen_rev | No | The revision you have read through; later ones show up in fmrl_inbox. Leave out to start from the latest (or keep where an existing watch is). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| rev | Yes | |
| url | Yes | |
| private | Yes | |
| can_open | Yes | |
| seen_rev | Yes |
fmrl_whoamiCheck this machine's fmrl key and accountAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| trust_vault | No | Only after this tool said the account's vault fingerprint changed: the new fingerprint, exactly as fmrl.site/account shows it, once the person confirms they reset private page sync there. Trusting it lets this machine's key rings sync to that vault again. Leave out otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ring | No | |
| label | No | The key's name, which the revisions it makes carry. Absent while unnamed. |
| notes | No | |
| quota | Yes | This month's free publishes: how many are used, the monthly limit, and when the count resets. |
| plugin | No | |
| prefix | Yes | The key's public prefix, the part safe to show; the secret is never returned. |
| canvases | No | The sentence whoami's text says about where this agent's canvases show on fmrl.site, word for word. |
| link_url | No | |
| linked_at | No | |
| attach_url | No | A one-time link that attaches an unattached agent, when one was supplied. Relay it unchanged. |
| created_at | Yes | |
| rotated_at | No | When the key's secret was last rotated. |
| attached_at | No | When the agent was attached to a person's fmrl account; null while unattached. |
| attached_via | No | Where an attached agent's canvases show: account, in every browser signed in to its person's fmrl account; browser, only in the one browser it was attached from. Absent while unattached or when the server does not say. |
| canvases_url | No | The fmrl.site page that opens its person's canvases, where an attached agent's canvases are listed tagged with this key's prefix. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.17.8- Changed
fmrl_attach1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
fmrl_delete2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / id / descriptionPrevious value: -"A document id or any fmrl.site URL for it."New value: +"The page id, or any fmrl.site link to the page."
- Changed
fmrl_edit2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / base_rev / maximumAdded value: +9007199254740991
- Changed
fmrl_get3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / rev / maximumAdded value: +9007199254740991 - added
Output schema / properties / section_map / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
fmrl_publish1 field changed- changed
Input schema / properties / visibility / descriptionPrevious value: -"private (the default): encrypted here before upload; the link carries the key after #p=, the page has no title or preview on fmrl.site, cannot be kept past seven days, and cannot be recovered without the link. public: anyone with the link can read it, it shows a title and preview, and it can be kept. Pass public only when the person asked for a public page, after showing them what will be shared."New value: +"private (the default): encrypted here before upload; the link carries the key after #p=, the page has no title or preview on fmrl.site, and opens only with that key. public: anyone with the link can read it, and it shows a title and preview. Either can be kept from the page itself. Pass public only when the person asked for a public page, after showing them what will be shared."
- Changed
fmrl_publish_file1 field changed- changed
Input schema / properties / visibility / descriptionPrevious value: -"private (the default): encrypted here before upload; the link carries the key after #p=, the page has no title or preview on fmrl.site, cannot be kept past seven days, and cannot be recovered without the link. public: anyone with the link can read it, it shows a title and preview, and it can be kept. Pass public only when the person asked for a public page, after showing them what will be shared."New value: +"private (the default): encrypted here before upload; the link carries the key after #p=, the page has no title or preview on fmrl.site, and opens only with that key. public: anyone with the link can read it, and it shows a title and preview. Either can be kept from the page itself. Pass public only when the person asked for a public page, after showing them what will be shared."
- Changed
fmrl_redeem1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
fmrl_set_visibility2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / rev / maximumAdded value: +9007199254740991
- Changed
fmrl_status1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
fmrl_watch2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / seen_rev / maximumAdded value: +9007199254740991
- Changed
fmrl_whoami8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / trust_vault / descriptionAdded value: +"Only after this tool said the account's vault fingerprint changed: the new fingerprint, exactly as fmrl.site/account shows it, once the person confirms they reset private page sync there. Trusting it lets this machine's key rings sync to that vault again. Leave out otherwise." - added
Output schema / properties / attach_url / descriptionAdded value: +"A one-time link that attaches an unattached agent, when one was supplied. Relay it unchanged." - added
Output schema / properties / attached_at / descriptionAdded value: +"When the agent was attached to a person's fmrl account; null while unattached." - added
Output schema / properties / label / descriptionAdded value: +"The key's name, which the revisions it makes carry. Absent while unnamed." - added
Output schema / properties / prefix / descriptionAdded value: +"The key's public prefix, the part safe to show; the secret is never returned." - added
Output schema / properties / quota / descriptionAdded value: +"This month's free publishes: how many are used, the monthly limit, and when the count resets." - added
Output schema / properties / rotated_at / descriptionAdded value: +"When the key's secret was last rotated."
14 tool updates
v0.17.6- First observed
fmrl_attach - First observed
fmrl_delete - First observed
fmrl_edit - First observed
fmrl_get - First observed
fmrl_inbox - First observed
fmrl_list - First observed
fmrl_publish - First observed
fmrl_publish_file - First observed
fmrl_redeem - First observed
fmrl_rotate - First observed
fmrl_set_visibility - First observed
fmrl_status - First observed
fmrl_watch - First observed
fmrl_whoami
TDQS
Scored across 14 tools
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.
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.
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.
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
Related MCP Connectors
Publish pages your agent writes to a private, shareable URL, then read, comment on and update them.
Publish live pages from any agent, collect what visitors submit, and read it back.
Private living HTML pages agents publish, recall, update, and share at name.notepad.page.
Publish, update, read, rename, and share single-URL web pages from any AI agent.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA local conversational writing canvas that provides an MCP interface for agents like Codex or Claude Code to collaboratively read, write, and manage pages and assets in real-time.92MIT

aamioofficial
AlicenseAqualityBmaintenanceEphemeral rendezvous for agents: threads with a secret read key and a public write address that expire on time, receipts that outlive them, and an open board where agents that have never met find each other. Local runtime with fifteen MCP tools over stdio, no account, no API key.15103 PyPIMIT- AlicenseAqualityCmaintenanceA home for any agent on the internet: inbox, public memory, job board, rooms, human help. Free, no key.20MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to create, read, list, update, restore, and share client-side-encrypted workspaces that any other agent or person holding one link can read and write. Writes are version-checked so concurrent editors are told to merge instead of silently clobbering each other, and content expires 24 hours after the last edit.14 npmMIT