Oh Fax
Server Details
Outbound US/CA fax for agents: quote PDF, pay via MPP, get delivery receipt.
- Status
- Healthy
- Uptime
- 100.0% over 40 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
The four tools map to distinct lifecycle stages: quote, send, status, and receipt. The main overlap is that both quote_fax and send_fax return pricing/payment-link information, but the descriptions clarify that quote_fax is free validation/preview while send_fax returns authorization to transmit.
All tool names follow a clear verb_noun pattern: get_fax_receipt, get_fax_status, quote_fax, and send_fax. The naming is predictable and readable.
Four tools is well-scoped for a focused fax-sending workflow. Each tool earns its place by covering a required lifecycle stage without unnecessary surface area.
The surface covers the full core lifecycle: quote/validate, send/authorize, check status, and obtain a verifiable receipt. No obvious critical operation is missing for the stated purpose.
Available Tools
4 toolsget_fax_receiptGet fax receiptARead-onlyInspect
Verifiable delivery receipt for a completed fax. Available once the fax has reached a final state. Use this to prove the workflow finished.
| Name | Required | Description | Default |
|---|---|---|---|
| fax_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a safe read operation. The description adds useful behavioral information: the receipt is only available once the fax reaches a final state, and its purpose is verification. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, focused sentences with no filler. The core function is front-loaded, the availability constraint is stated, and the practical use case is given immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool, the description is nearly complete: it explains what to expect, when it is available, and why to call it. It could mention behavior when the fax is not in a final state, but this is a minor gap given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, fax_id, and it is self-explanatory. However, schema description coverage is 0% and the description does not explicitly explain that fax_id identifies the fax for which the receipt is requested, though it implicitly refers to a completed fax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's resource: a verifiable delivery receipt for a completed fax. It differentiates from siblings like get_fax_status, quote_fax, and send_fax by emphasizing proof of completed delivery rather than current status or sending a fax.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use it only after the fax has reached a final state, and use it to prove the workflow finished. It does not explicitly name alternatives, but the context makes the intended timing clear relative to get_fax_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fax_statusCheck fax statusARead-onlyInspect
Current delivery state of a fax: awaiting_payment, paid, submitted, sending, delivered, or failed. Failed faxes include a reason you can act on.
| Name | Required | Description | Default |
|---|---|---|---|
| fax_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral detail by listing possible return states and noting that failed faxes include a reason the agent can act on, which goes beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly written sentence front-loads the core behavior, then packs the state list and the actionable failed-fax note without wasted words. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only status lookup, the description gives the agent the essential return vocabulary and the failure-reason behavior. It is slightly thin on the exact response envelope, but no output schema exists and the expected values are clearly named.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain how to obtain fax_id or that it is the identifier returned by send_fax. The phrase 'of a fax' merely echoes what the property name already implies, so the description adds little parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Check fax status' and the opening phrase 'Current delivery state of a fax' clearly identify the resource and the operation. The enumeration of concrete states (awaiting_payment, paid, submitted, sending, delivered, or failed) makes it easy to distinguish this status tool from get_fax_receipt, quote_fax, and send_fax.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for monitoring delivery and investigating failures, especially through the actionable failed-reason detail, but it never explicitly says when to prefer it over get_fax_receipt or other siblings. The usage context is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_faxGet the price of a faxARead-onlyInspect
Returns the price: $2.00 per fax by card for up to 100 pages (flat, no per-page charge); prepaid balance or MPP stablecoin: $0.02 per page. Also validates the number and PDF and returns a quote_id and payment link. Free; sends nothing. Call before send_fax.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination fax number. US and Canada only. | |
| document_url | No | Publicly reachable URL of a PDF. | |
| document_base64 | No | Base64-encoded PDF, as an alternative to document_url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds meaningful context beyond those: the pricing tiers, that validation of number and PDF occurs, that it sends nothing, and that the response includes a quote_id and payment link. It does not cover quote expiration or error behavior, so it falls short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads pricing, which dominates the first sentence. The more actionable instruction, 'Call before send_fax,' is relegated to the end; reordering would improve it, but every sentence still carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately names the return values (quote_id, payment link). It covers cost, validation, and sequencing, but does not address quote validity duration or failure modes, leaving a minor gap for a pre-payment validation step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents all three parameters, including that destination is US/Canada only. The description only implicitly references the parameters through 'validates the number and PDF,' adding little beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources: returns price, validates number and PDF, returns quote_id and payment link. This clearly distinguishes it from siblings send_fax, get_fax_status, and get_fax_receipt, which do not price or validate documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to 'Call before send_fax,' which establishes both when to use it and its relation to the natural next tool. 'Free; sends nothing' further clarifies that it is a safe, non-sending check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_faxSend a fax (costs money)ADestructiveIdempotentInspect
Returns the authorization instructions for sending a previously quoted fax. THIS ACTION COSTS MONEY AND CANNOT BE UNDONE: paying the returned link transmits a real document to a real fax machine. This tool itself does not charge you โ it returns the price and a payment link, and the fax is only sent once you deliberately pay that link. Confirm the cost is acceptable before paying.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | A quote_id from quote_fax. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains the crucial behavioral nuance: this tool does not itself charge money, it returns a price and payment link, and the fax is sent only after the user deliberately pays. It also discloses that the underlying action is irreversible and real-world, matching destructiveHint and openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, immediately follows with the cost and irreversibility warning, then clarifies the payment flow. It is appropriately sized for a money-related destructive action, and each sentence contributes to preventing accidental use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description sufficiently explains what is returned: authorization instructions, price, and a payment link. It also covers the key risks and prerequisites an agent needs before calling a destructive, open-world fax tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single quote_id parameter is already fully documented by the schema as coming from quote_fax. The description reinforces that this is for a previously quoted fax but does not add format or validation details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns authorization instructions for sending a previously quoted fax. It also explicitly clarifies that the tool itself does not send the fax or charge money, distinguishing its real behavior from the potentially misleading name send_fax.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is used after a fax has already been quoted, and the schema reinforces that quote_id comes from quote_fax. It does not explicitly name alternatives such as quote_fax, get_fax_status, or get_fax_receipt, but the prerequisite context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
get_fax_receipt - First observed
get_fax_status - First observed
quote_fax - First observed
send_fax
Related MCP Connectors
Send a fax to any US or Canadian number from a PDF, quoted per page before sending.
Prepare and track US PDF faxes with user-approved checkout. No account or subscription.
Send and receive faxes from an AI agent: exact quotes, human approvals, delivery evidence, sandbox.
Print and mail physical documents in the US via USPS, with quotes, agent payment and tracking.
Related MCP Servers
AlicenseAqualityAmaintenanceEnables AI agents to prepare, preview, quote, and send approved faxes, track delivery and evidence, read inbound faxes, extract data, and request human approvals through a fax API.15MIT- AlicenseNot gradedqualityDmaintenanceEnables AI agents to send free and paid faxes to US and Canada numbers, check fax status, and purchase prepaid credits, all without leaving the chat.MIT
- AlicenseNot gradedqualityDmaintenanceSend, receive, and verify faxes from AI assistants and agents via the Model Context Protocol.197 npmMIT
- AlicenseNot gradedqualityDmaintenanceGenerates PDF documents from HTML or Markdown content with customizable page size, margins, and orientation, supporting pay-per-call payments via x402.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.