Skip to main content
Faxbeep runs a remote MCP (Model Context Protocol) server, so an AI agent can give a person the test numbers and then find their test without a polling script. It returns the same data as the API and is read-only: it can’t send a fax or remove one. The Faxbeep MCP page on faxbeep.com has example prompts and longer setup steps.
Each test is public for 30 days. Anyone can open it on faxbeep.com. Use a test page with no personal or confidential information. To remove a test early, see Remove a fax.

Endpoint

Each tool has the annotations readOnlyHint: true, destructiveHint: false, idempotentHint: true, and openWorldHint: false.

Add the server to a client

Menu names and commands change often. The steps below are as of November 2026; check the client’s own documentation if they don’t match.

Chat apps

  • Claude: go to Customize > Connectors, select + Add > Add custom connector, enter a name and the URL https://faxbeep.com/mcp, and choose No sign in for authentication. On Team and Enterprise plans, an owner adds the connector under Organization settings > Connectors.
  • ChatGPT: turn on developer mode in the Apps settings (under Advanced settings), then create an app with the URL https://faxbeep.com/mcp and no authentication. Developer mode is available on the web and only on some plans. In a conversation, choose Developer mode from the + menu and select the app.

Coding agents

For Cursor, put the JSON in ~/.cursor/mcp.json, or in .cursor/mcp.json in a project. For Codex, the command writes this to ~/.codex/config.toml:
In Claude Code and Gemini CLI, run /mcp to check the connection and list the tools.

How an agent finds a test

1

Get the numbers

get_test_numbers returns the test numbers, the test email addresses, the limits, and now, the server time.
2

Record the start time

Just before the person sends the test, take now from the latest result: call get_test_numbers again, or use the now of a list_test_faxes result. Use it as since. Don’t use the agent’s own clock: agents often have none, or write a local time with a Z.
3

Send the test

The person sends a fax to a test number, or an email with one attachment to a test address.
4

Poll the list

Call list_test_faxes with that since until a candidate appears. Polling means repeating the same call at an interval until the result appears.
5

Check the candidate

Show the person the view_url so they can check the page. In a chat that shows images, the agent also shows thumbnail_url as an image in its answer. get_test_fax reads one fax again by its slug or its view_url.

Polling rules

The server states these rules in its instructions (returned by initialize) and in its tool descriptions, so a client that passes them to the model gives the agent the same rules.
  • Keep since fixed while you poll. In the server’s words: “Do not move it to the newest received_at: a long fax can appear after a newer, shorter one.”
  • A match narrows the candidates; it doesn’t prove the fax is the person’s. Other people send tests at the same time. Filtering by time, sender, or page count lowers the number of candidates, so show the person the view_url.
  • Wait between calls, and stop. The server says: “A new fax usually appears within a minute after the call ends or the email is sent; a few take longer. Wait about 30 seconds between calls, and stop after about 10 minutes.” If nothing appears, see My fax does not appear.

Tools

Each successful result has the JSON in structuredContent and the same JSON as text in content. An error is a tool result with isError: true and the message as text, not a JSON-RPC error.

get_test_numbers

Input: none. The values in limits are the ones on the Limits page.

list_test_faxes

The same list as GET /api/faxes: published tests from everyone, newest first, with one more filter, page_count. An empty string or null counts as not given. The result has: When faxes has limit items, more can match. Narrow the list with from, page_count, or a since closer to the test. An empty list isn’t an error. Its message is: “No fax matches yet. This is normal while a fax is on its way. A new fax usually appears within a minute after the call ends or the email is sent; a few take longer. Call again with the same since. Wait about 30 seconds between calls, and stop after about 10 minutes. Then tell the person, and point them to https://faxbeep.mintlify.app/troubleshooting/fax-does-not-appear.”

get_test_fax

The same lookup as GET /api/faxes/{slug}. The result is one fax object, the same as an item of list_test_faxes, as text and as structured content. After it comes an image of page 1 (MCP image content, JPEG or PNG, about 400 pixels wide), so a client that shows images from a tool shows the fax without a click. The image is left out when it can’t be read; the fax object still comes. A client can draw a tool image very small (Claude does), so the server asks the agent to also show thumbnail_url as an image in its answer, in a chat that shows images, and to give view_url for the full page. A removed fax’s files are deleted, so it can’t be read again.

Sample answers for testing a connection

Real tests leave the list after 30 days, so the server also answers fixed samples. They aren’t real faxes, have a fixed date in the past (2026-01-05T09:30:00Z), and stay available. The sample’s pdf_url and thumbnail_url are real files, and get_test_fax with fax_example returns the sample’s image of page 1. Its view_url points to the Faxbeep MCP page, and get_test_fax with that URL returns the sample again. To check the endpoint without a client, call a tool directly. The server is stateless, so no initialize call is needed first:

Rate limit and errors

600 MCP messages per minute per IPv4 address, or per IPv6 /64 block. Every message counts: the handshake, the tool list, and each tool call. Chat apps such as Claude connect from their own servers, not from your device, so many users of one app can share an address. Over the limit, the server returns 429 with a Retry-After header; wait that many seconds. This limit is separate from the API’s 60 requests per minute. Every response, including errors, is JSON and has Cache-Control: no-store, private, so caches don’t keep an old answer. GET and DELETE return 405 with {"message": "The MCP endpoint takes POST only."}.

Sending a test without a fax machine

Faxbeep only receives faxes. To send a test without a fax machine, use a fax sending service, for example PayPerFax.

Next steps

Find your fax

How time, sender, and page count narrow the results.

API reference

The fax object, the API rate limit, and errors.