MCP for agents
MCP, the Model Context Protocol, is a standard way to give an AI agent tools it can call. frwrd.to offers one tool for each thing the API does, so an agent can make links, write pages and read numbers in your workspace.
The endpoint is https://api.frwrd.to/mcp. It speaks streamable HTTP, and it
takes your workspace key as a bearer token:
Authorization: Bearer fw_...
An agent sees only the workspace its key belongs to.
Claude Code
claude mcp add --transport http frwrd https://api.frwrd.to/mcp --header "Authorization: Bearer fw_..."
Run claude mcp list to check the connection. Keep the key out of files you
commit: if you share a .mcp.json, write the header as
Bearer ${FRWRD_KEY} and set FRWRD_KEY in your environment.
Other MCP clients
Add a remote server with the streamable HTTP transport (some clients call it
"http"), the URL https://api.frwrd.to/mcp, and the header
Authorization: Bearer fw_.... Clients that only speak stdio can reach it
through a bridge such as mcp-remote.
The tools
Workspace:
get_workspace: the workspace, its limits and the DNS record that verifies the domain.verify_workspace: check the DNS record now and lift the limits.claim_handle: claim a short handle so pages live at/@handle.set_utm: set the UTM defaults, appended to every link you create or retarget and to the links on your pages.set_default_language: choose the language that lives at plain page addresses.list_domains,add_domain,remove_domain: custom page domains.delete_workspace: delete the workspace; it needsconfirm, the workspace's domain, and an agent should call it only when you asked for exactly that. Deleting a workspace stops its key and takes its pages offline at once; after 7 days the pages and settings are deleted. Short links keep working. Proving the domain (key recovery) within 7 days restores everything; up to 60 days, the links. After 60 days the domain is free and the links keep working without an owner. Browsers may keep cached copies of a page, its QR code and images for up to an hour after the delete.
Links:
create_link: a short link for an http or https address.list_links,get_link: read your links.update_link: change the target, title or tags, or archive and restore a link.archive_link: stop a link from redirecting, keeping its numbers.get_link_stats: clicks in a time window, by channel and by day;range(1d,7d,30d) adds every hourly or daily bucket and the all-time totals.get_workspace_stats: the numbers of all your links at once: the clicks in arange(1d,7d,30d; default7d) as buckets with the totals, the all-time total (nullwhen it could not be counted right now) and the ten most clicked links. The answer is cached, so it may be up to 5 minutes old; when the server is busy it answersrate_limited, so retry in a few seconds.get_qr: the link's QR code as SVG.
Pages:
list_pages: your pages, with language and translations.get_page: a page as Markdown, with its version and the short link behind each link.write_page: create or replace a whole page.delete_page: remove a page.get_page_stats: views of a page and clicks on each link;rangeworks as above.list_page_versions: the save history.
Each page is also a resource, frwrd://pages/{path}, with - for the root
page. Tool errors carry the same codes as the REST API.