Developers

Build with TempoRevenue.

Create drafts, check status and read proposals from your own code or your AI.

TempoRevenue MCP server

The TempoRevenue MCP server is a remote MCP server. Any MCP client that supports Streamable HTTP can connect to it and create proposal drafts from a short description of a client's request.

Listed in the official MCP Registry as com.temporevenue/proposals.

Endpoint
https://app.temporevenue.com/api/mcp
Transport
Streamable HTTP, stateless, JSON responses
Authentication
Authorization: Bearer <API key>
Tools
create_proposal, get_proposal_status, list_proposals, get_credit_balance

Drafts only. Nothing is ever sent to a client from an AI assistant or from the API.

Tools

create_proposal

Creates a draft10 per minute

Create a draft proposal in the user's TempoRevenue account from a short description of the client's request: client name, scope, timeline and budget. If the request states a price, it is used as the total; otherwise the price is calculated from the user's own rates. Returns a link to review and send. Uses one proposal from the user's allowance.

ParameterTypeDescription
deal_description (required)stringBrief description of the client's request. Do not send the full chat history. Up to 20,000 characters.
client_namestringThe client's name, if known. Up to 200 characters.
languageen | pt | es | deLanguage of the proposal. If omitted, it follows the language of the description.

Returns: id, title, editor_url (the link to review and send). The proposal is saved as a draft; nothing is sent to the client. Takes 30 to 60 seconds.

Example result
{
  "id": "5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11",
  "title": "Online store for Bloom & Co",
  "editor_url": "https://app.temporevenue.com/proposals/5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11"
}

get_proposal_status

Read only60 per minute

Check the status of a proposal in the user's TempoRevenue account: draft, viewed or accepted, with the date the client first opened it and the date they accepted it. Use the `id` returned by create_proposal or list_proposals.

ParameterTypeDescription
id (required)stringProposal id.

Returns: status, plus viewed_at and accepted_at when they have happened.

Example result
{
  "status": "viewed",
  "viewed_at": "2026-10-01T14:22:09Z"
}

list_proposals

Read only60 per minute

List the user's most recent proposals in TempoRevenue, newest first: id, title, status (draft, viewed or accepted) and a link to open each one. Optionally filter by status. Returns at most 20.

ParameterTypeDescription
statusdraft | viewed | acceptedOnly proposals in this status.
limitinteger, 1 to 20How many proposals to return. Default 10.

Returns: proposals: a list of id, title, status, editor_url.

Example result
{
  "proposals": [
    {
      "id": "5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11",
      "title": "Online store for Bloom & Co",
      "status": "viewed",
      "editor_url": "https://app.temporevenue.com/proposals/5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11"
    }
  ]
}

get_credit_balance

Read only60 per minute

Return how many proposals the user can still create in TempoRevenue.

No parameters.

Returns: credits_remaining.

Example result
{
  "credits_remaining": 12
}

Notes

  • Each tool result is a JSON document in a single text content block. A failed call sets isError and returns { "error": { "code", "message" } }, using the same error codes as the REST API, except that an account with no proposals left gets no_proposals_left and a plain message, with no link.
  • create_proposal can take 30 to 60 seconds, and the server allows up to 90. Set your client's tool timeout to at least 90 seconds.
  • JSON-RPC batch requests are not supported and return 400.
  • OAuth dynamic client registration accepts only the verified callbacks of Claude and ChatGPT and loopback addresses with a port (http://localhost:PORT, http://127.0.0.1:PORT, http://[::1]:PORT). Need another MCP client? Contact support.

Connect with an API key

  1. Create a key

    Open TempoRevenue, go to Integrations, and create an API key. Copy it right away: it is shown once. Open Integrations.

  2. Add the server

    Add the server to your client with the snippet for your tool (below). Replace YOUR_API_KEY with your key.

  3. Ask for a proposal

    Ask: "Turn these call notes into a proposal."

Claude Code

Run this in your terminal. Claude Code guide.

Claude Code
claude mcp add --transport http temporevenue https://app.temporevenue.com/api/mcp --header "Authorization: Bearer YOUR_API_KEY"

Claude Desktop

Needs Node.js. Add this to claude_desktop_config.json (Settings, Developer, Edit Config) and restart. Claude Code and Claude Desktop guide.

Claude Desktop
{
  "mcpServers": {
    "temporevenue": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://app.temporevenue.com/api/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Cursor

Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project. Cursor guide.

Cursor
{
  "mcpServers": {
    "temporevenue": {
      "url": "https://app.temporevenue.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Gemini CLI

Run this in your terminal. Gemini CLI guide.

Gemini CLI
gemini mcp add --transport http temporevenue https://app.temporevenue.com/api/mcp --header "Authorization: Bearer YOUR_API_KEY"

Try saying

  • Turn these call notes into a proposal: [paste notes]
  • Did my client open the proposal I sent last week?
  • Show my last 5 proposals and which ones were accepted.
  • How many proposal credits do I have left this month?

Prefer no key? Claude and ChatGPT connectwith OAuth: sign in to TempoRevenue and approve access.

TempoRevenue API

Base URL
https://app.temporevenue.com/api/v1
Authentication
Authorization: Bearer <API key>
Format
JSON in, JSON out. Responses are sent with Cache-Control: no-store.
MethodEndpointWhat it does
POST/proposalsCreate a proposal draft
GET/proposals/{id}Get a proposal's status
GET/creditsGet your credit balance

Listing proposals is available through the TempoRevenue MCP server (list_proposals). The TempoRevenue API has the three endpoints above.

POST /proposals

201 Created

Body: input (required, text, up to 20,000 characters), client_name (optional, up to 200 characters), language (optional: en, pt, es or de; defaults to the language of the input). Takes 30 to 60 seconds. Debits one proposal only after the draft is saved. Send an Idempotency-Key header to make retries safe.

Request
curl -X POST https://app.temporevenue.com/api/v1/proposals \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2a9e-bloom-store-v1" \
  -d '{"input": "Sarah at Bloom & Co needs a new online store in 3 weeks, budget $1,200.", "client_name": "Sarah", "language": "en"}'
Response
{
  "id": "5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11",
  "title": "Online store for Bloom & Co",
  "editor_url": "https://app.temporevenue.com/proposals/5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11",
  "status": "draft",
  "public_url": "https://app.temporevenue.com/p/8Kf2vQ9mT1xLw0aZbN4cRg",
  "credits_remaining": 12
}

GET /proposals/{id}

200 OK

Returns draft, viewed or accepted, with the time the client first opened the proposal and the time they accepted it. An id that is not yours returns 404, the same as an id that does not exist.

Request
curl https://app.temporevenue.com/api/v1/proposals/5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11 \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "id": "5c0e6f3a-0b53-4a0e-9d57-6a4f6f6f2c11",
  "status": "viewed",
  "viewed_at": "2026-10-01T14:22:09Z",
  "accepted_at": null,
  "public_url": "https://app.temporevenue.com/p/8Kf2vQ9mT1xLw0aZbN4cRg"
}

GET /credits

200 OK

Proposals you can still create: the included quota of your plan plus purchased credits, in one number, and your plan.

Request
curl https://app.temporevenue.com/api/v1/credits \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "credits_remaining": 12,
  "plan": "pro"
}

Statuses

StatusMeaning
draftCreated, not opened by the client yet.
viewedThe client opened the proposal.
acceptedThe client accepted the proposal.

There is no sent status: TempoRevenue has no send step, you share the link yourself.

Errors

Errors use the HTTP status and a JSON body with a stable code. The TempoRevenue MCP server returns the samecode values inside tool results, except that an account with no proposals left gets no_proposals_leftinstead of payment_required. Match on code, not on message.

Error body
{
  "error": {
    "code": "payment_required",
    "message": "No proposals or credits left. Buy credits or upgrade to continue.",
    "purchase_url": "https://app.temporevenue.com/usage"
  }
}
StatusCodeMeaning
400invalid_jsonThe request body is not a JSON object.
401invalid_api_keyMissing, malformed or revoked API key. Also returns a WWW-Authenticate header.
402payment_requiredNo proposals or credits left. The error includes purchase_url.
402no_proposals_leftTempoRevenue MCP server only: the account has no proposals left. The message points to the plan page in the account, with no link.
404not_foundThe proposal does not exist or is not in your account, or your account profile was not found.
405method_not_allowedWrong method. POST /proposals only accepts POST.
409idempotency_in_progressA request with the same Idempotency-Key is still running. Retry in a few seconds.
422invalid_requestA field is missing or invalid. The error includes field.
422profile_incompleteFinish your TempoRevenue profile (hourly rate, public email and phone) before creating proposals. The error includes profile_url.
422content_blockedThe proposal could not be written for this request. The error includes detail.
422idempotency_key_reuseThis Idempotency-Key was already used with a different body.
422idempotency_key_expiredThis Idempotency-Key was used more than 30 days ago. Use a new key.
429rate_limitedToo many requests. Wait for the Retry-After header; the error includes retry_after_seconds.
502generation_failedProposal generation failed. Nothing was charged. Try again.

Rate limits

  • TempoRevenue API: 10 requests per minute per account, on every endpoint.
  • TempoRevenue MCP server: 10 create_proposal calls per minute, and 60 other calls per minute (initialize, tools/list, get_proposal_status, list_proposals, get_credit_balance).
  • Limits are counted per account and per key. Creating more keys does not raise them.
  • When you go over, you get 429 with a Retry-After header (seconds).

Idempotency

  • Send an Idempotency-Key header on POST /proposals (1 to 255 printable ASCII characters). It is optional, and it makes retries safe.
  • Repeat the same key with the same body and you get the same proposal back, with the current credits_remaining, no new generation and no new charge. The repeat carries the header Idempotent-Replay: true.
  • The same key with a different body is 422 idempotency_key_reuse. The same key while the first request is still running is 409 idempotency_in_progress. Results are kept for 30 days.
Safe retry
curl -X POST https://app.temporevenue.com/api/v1/proposals \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2a9e-bloom-store-v1" \
  -d '{"input": "Sarah at Bloom & Co needs a new online store in 3 weeks, budget $1,200.", "client_name": "Sarah", "language": "en"}'

Limits and pricing

  • Proposals created through the TempoRevenue API or the TempoRevenue MCP server use the same credits as the app, one per proposal, and the same account quota.
  • Free plan: 3 proposals per month, no credit card. Pro: $29/month, 30 proposals per month, 7-day trial.
  • Pro is sold in the United States, Canada and Brazil. The free plan works anywhere.
  • You can create up to 5 active API keys. One key works for the TempoRevenue API and for the TempoRevenue MCP server.

See pricing for the plans.

Security

  • Keys are per user and can be revoked anytime in Integrations. A key is shown once, when you create it; we store only a hash.
  • Neither the TempoRevenue API nor the TempoRevenue MCP server can send anything to your clients, and neither can edit or delete a proposal. They create drafts and read status, lists and balance.
  • A proposal id that is not yours returns 404, never 403, so ids in other accounts are not revealed.
  • Treat a key like a password: keep it out of source control and rotate it if it leaks.
  • Content you send is processed under our privacy policy, the same as content you paste in the app.

Read the privacy policy. Questions about the TempoRevenue API:contact@temporevenue.com.

Your next proposal takes seconds.

Start free

3 free proposals a month. No card needed.