Bizmoon
Grants & Loans
Regulations
MCP
Industries
Sign in
Learn more
MCPserver
OverviewDocsPlaygroundCredits
llms.txtOpenAPI

Guide

Get startedProtocolAuth and limits

Tools

Search regulationsRead one documentShow coverageWhat changed since a dateFind funding

Reference

Organization toolsREST APIErrors
llms.txt →

Reference

MCP server docs

Everything an agent or a developer needs: the wire protocol, both tiers, and every tool with typed parameters and response fields. Run anything for real in the playground. Agents can read this site as markdown via /llms.txt or fetch this page as markdown at /mcp/docs.md.

Get started

Three steps to a connected agent.

Tool reference

Typed parameters and response fields for all five tools.

Auth and limits

Free tier versus API key, with exact rate limits.

Errors

The three failure shapes agents should handle.

Get started

  1. Add the server to your client below. The free tier needs no account.
  2. Ask a question: "What changed in California healthcare regulations this month? Cite every source."
  3. Optional: add an API key, bought with credits or included with the Professional plan, for full history and higher limits.
claude mcp add --transport http bizmoon https://bizmoon.ai/api/mcp

With an API key, for full history and your organization's tools:

claude mcp add --transport http bizmoon https://bizmoon.ai/api/mcp \
  --header "Authorization: Bearer bm_sk_..."

In Claude.ai or Claude Desktop, open Settings, then Connectors, then Add custom connector, and paste https://bizmoon.ai/api/mcp. For a key, add a request header named Authorization with the value Bearer bm_sk_....

Protocol

The server speaks Model Context Protocol over stateless Streamable HTTP at one endpoint:

https://bizmoon.ai/api/mcp

Send JSON-RPC 2.0 by POST with content-type: application/json and accept: application/json, text/event-stream. Responses arrive as server-sent events; the JSON-RPC message is on the last data: line. No session is required: initialize is optional and every request stands alone, so scheduled jobs can call a tool directly.

List the tools available to your credentials:

curl -s -X POST https://bizmoon.ai/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Tool results wrap their payload as JSON text in result.content[0].text, with result.isError set on failures. All tools are read-only and annotated as such.

A complete call, in JavaScript:

const res = await fetch("https://bizmoon.ai/api/mcp", {
  method: "POST",
  headers: {
    "content-type": "application/json",
    accept: "application/json, text/event-stream",
    // With an API key: authorization: "Bearer bm_sk_..."
  },
  body: JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "search_regulatory_changes",
      "arguments": {
        "jurisdiction": "CA",
        "keyword": "health",
        "limit": 5
      }
    }
  }),
});
const text = await res.text();
const line = text.split("
").filter((l) => l.startsWith("data: ")).pop();
const msg = JSON.parse(line ? line.slice(6) : text);
const payload = JSON.parse(msg.result.content[0].text);
console.log(payload);

Auth and limits

No authentication is required for the free tier. An API key is sent as a bearer header and unlocks full history and higher limits. Buy one with prepaid credits at /mcp/start, or get it with the Professional plan, which also adds the organization tools:

Authorization: Bearer bm_sk_...
FreeAPI key
HistoryLast 90 daysEverything
Results per call1050
Rate limit30 per min, 300 per day per visitor60 per min per key, 1,000 per day per organization
Tools5 public5 public + 5 organization

Where the key goes, per client. The header is the same everywhere:

Claude Codeclaude mcp add ... --header "Authorization: Bearer bm_sk_..."
Claude.ai and Claude DesktopSettings, Connectors, Add custom connector: an org admin adds a request header named Authorization
OpenAI and xAI APIs"authorization": "bm_sk_..." beside server_url on the mcp tool
Gemini CLIheaders: { "Authorization": "Bearer bm_sk_..." } beside httpUrl
OpenClawheaders: { "Authorization": "Bearer bm_sk_..." } on the server entry
Cursor, VS Code, Windsurfheaders: { "Authorization": "Bearer bm_sk_..." } in the MCP config
cURL or any HTTP client-H "authorization: Bearer bm_sk_..."
REST API (/api/v1)Same bearer header on every request

A missing or malformed header simply falls back to the free tier; an invalid bm_sk_ key returns HTTP 401.

Search regulations

search_regulatory_changes

Search rules and notices across every register Bizmoon monitors, newest first, each with an AI summary and the official source URL. Funding opportunities are left out; search_funding_programs covers those.

ParameterTypeRequiredDescription
jurisdictionstringnoUS_FED for federal, or a two-letter state code such as CA (US_STATE_CA also works). Omit for all jurisdictions. Unrecognized values return a tool error instead of silently widening the search.e.g. "CA"
agencystringnoCase-insensitive substring match on the issuing agency name.e.g. "Department of Public Health"
categorystringnoEither "regulation" or "funding". Omit to search regulations and uncategorized documents while leaving funding opportunities out. Pass "funding" to search those here instead.e.g. "regulation"
keywordstringnoCase-insensitive substring matched against title, AI summary, and description.e.g. "health"
fromstring (date)noYYYY-MM-DD. Only documents published on or after this date. The free tier floors this at 90 days ago and reports the clamp in lookbackClampedTo.e.g. "2026-08-01"
tostring (date)noYYYY-MM-DD. Only documents published on or before this date (the whole day is included).e.g. "2026-09-01"
limitintegernoMax results per call. Default 20. Free tier caps at 25, API key at 50.e.g. 10
offsetintegernoPagination offset. Default 0. Ask again with offset advanced by your limit until offset plus the results you have reaches total. A page is a snapshot: documents published between calls shift the window, so a recurring agent should advance its date rather than page far.e.g. 20

Responses include total (all matches), the page of results, and lookbackClampedTo when the free-tier window was applied.

Every result carries publishedDate, effectiveDate, agencies, an AI summary, and the canonical url to cite.

Request

Try it in the playground →
curl -s -X POST https://bizmoon.ai/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_regulatory_changes","arguments":{"jurisdiction":"CA","keyword":"health","limit":5}}}'
# key tier: add -H "authorization: Bearer bm_sk_..."
Response fields
FieldTypeDescription
results[].idstringDocument id; pass to get_regulatory_change
results[].titlestring | nullDocument title
results[].jurisdictionstringUS_FED or US_STATE_XX
results[].sourcestringThe official register the document came from
results[].agenciesstring[]Issuing agencies
results[].categorystring | null"regulation", "funding", or null when unclassified
results[].docTypestring | nullSource-specific document type
results[].publishedDatestring | nullYYYY-MM-DD publication date
results[].effectiveDatestring | nullYYYY-MM-DD effective date when stated
results[].summarystring | nullAI summary of the document
results[].urlstring | nullCanonical official URL to cite
totalintegerAll matches, not just this page
offsetintegerOffset this page started at
limitintegerEffective limit after tier clamping
lookbackClampedTostring | nullISO timestamp the window was floored to on the free tier, else null

Read one document

get_regulatory_change

One document in full: agencies, published and effective dates, summary, description, and the canonical URL to cite.

ParameterTypeRequiredDescription
idstringyesThe document id returned by search_regulatory_changes, changes_since, or search_funding_programs.e.g. "278724"

Unknown ids return { "error": "not_found", "id": "..." } as a normal result.

Request

Try it in the playground →
curl -s -X POST https://bizmoon.ai/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_regulatory_change","arguments":{"id":"304959"}}}'
# key tier: add -H "authorization: Bearer bm_sk_..."
Response fields
FieldTypeDescription
idstringDocument id
titlestring | nullDocument title
jurisdictionstringUS_FED or US_STATE_XX
sourcestringThe official register
agenciesstring[]Issuing agencies
categorystring | null"regulation", "funding", or null
docTypestring | nullSource-specific document type
publishedDatestring | nullYYYY-MM-DD
effectiveDatestring | nullYYYY-MM-DD when stated
summarystring | nullAI summary
descriptionstring | nullLonger extracted description
categoriesstring[]Source-provided category labels
urlstring | nullCanonical official URL to cite

Show coverage

list_jurisdictions

Coverage and freshness for every source: the latest publication and when the register was last checked.

No parameters.

Call this first in a session to learn what data exists and how fresh it is.

jurisdiction values from this tool are exactly what the other tools accept.

Request

Try it in the playground →
curl -s -X POST https://bizmoon.ai/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_jurisdictions","arguments":{}}}'
# key tier: add -H "authorization: Bearer bm_sk_..."
Response fields
FieldTypeDescription
jurisdictions[].jurisdictionstringUS_FED or US_STATE_XX
jurisdictions[].sourcestringRegister name
jurisdictions[].slugstringStable source identifier
jurisdictions[].lastRunAtstring | nullISO timestamp the register was last checked
jurisdictions[].lastRunStatusstring | null"success", "error", or "empty_clean"
jurisdictions[].latestPublishedstring | nullYYYY-MM-DD of the newest document

What changed since a date

changes_since

Everything published since a date, newest first. Built for scheduled agents: store the newest publishedDate you saw and pass it back next run.

ParameterTypeRequiredDescription
sincestring (date or ISO timestamp)yesDocuments published on or after this moment.e.g. "2026-08-25"
jurisdictionstringnoUS_FED for federal, or a two-letter state code such as CA (US_STATE_CA also works). Omit for all jurisdictions. Unrecognized values return a tool error instead of silently widening the search.e.g. "CA"
limitintegernoMax results per call. Default 20. Free tier caps at 25, API key at 50.e.g. 10
offsetintegernoPagination offset. Default 0. Ask again with offset advanced by your limit until offset plus the results you have reaches total. A page is a snapshot: documents published between calls shift the window, so a recurring agent should advance its date rather than page far.e.g. 20

For a recurring run, advance `since` to the newest publishedDate you stored rather than paging: it stays correct as new documents arrive and never re-reads what you already have.

Request

Try it in the playground →
curl -s -X POST https://bizmoon.ai/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"changes_since","arguments":{"since":"2026-09-11","jurisdiction":"US_FED","limit":5}}}'
# key tier: add -H "authorization: Bearer bm_sk_..."
Response fields
FieldTypeDescription
results[].idstringDocument id; pass to get_regulatory_change
results[].titlestring | nullDocument title
results[].jurisdictionstringUS_FED or US_STATE_XX
results[].sourcestringThe official register the document came from
results[].agenciesstring[]Issuing agencies
results[].categorystring | null"regulation", "funding", or null when unclassified
results[].docTypestring | nullSource-specific document type
results[].publishedDatestring | nullYYYY-MM-DD publication date
results[].effectiveDatestring | nullYYYY-MM-DD effective date when stated
results[].summarystring | nullAI summary of the document
results[].urlstring | nullCanonical official URL to cite
totalintegerAll matches, not just this page
offsetintegerOffset this page started at
limitintegerEffective limit after tier clamping
lookbackClampedTostring | nullISO timestamp the window was floored to on the free tier, else null

Find funding

search_funding_programs

Federal and state grants and incentive programs, with deadlines and the official program page.

ParameterTypeRequiredDescription
jurisdictionstringnoUS_FED for federal, or a two-letter state code such as CA (US_STATE_CA also works). Omit for all jurisdictions. Unrecognized values return a tool error instead of silently widening the search.e.g. "CA"
agencystringnoCase-insensitive substring match on the issuing agency or program office.e.g. "Commerce"
keywordstringnoCase-insensitive substring matched against title, AI summary, and description.e.g. "manufacturing"
fromstring (date)noYYYY-MM-DD lower bound on publication date (free tier floors at 90 days ago).
tostring (date)noYYYY-MM-DD upper bound on publication date, inclusive.
limitintegernoMax results per call. Default 20. Free tier caps at 25, API key at 50.e.g. 10
offsetintegernoPagination offset. Default 0. Ask again with offset advanced by your limit until offset plus the results you have reaches total. A page is a snapshot: documents published between calls shift the window, so a recurring agent should advance its date rather than page far.e.g. 20

Request

Try it in the playground →
curl -s -X POST https://bizmoon.ai/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_funding_programs","arguments":{"jurisdiction":"OH","keyword":"manufactur","limit":5}}}'
# key tier: add -H "authorization: Bearer bm_sk_..."
Response fields
FieldTypeDescription
results[].idstringDocument id; pass to get_regulatory_change
results[].titlestring | nullDocument title
results[].jurisdictionstringUS_FED or US_STATE_XX
results[].sourcestringThe official register the document came from
results[].agenciesstring[]Issuing agencies
results[].categorystring | null"regulation", "funding", or null when unclassified
results[].docTypestring | nullSource-specific document type
results[].publishedDatestring | nullYYYY-MM-DD publication date
results[].effectiveDatestring | nullYYYY-MM-DD effective date when stated
results[].summarystring | nullAI summary of the document
results[].urlstring | nullCanonical official URL to cite
totalintegerAll matches, not just this page
offsetintegerOffset this page started at
limitintegerEffective limit after tier clamping
lookbackClampedTostring | nullISO timestamp the window was floored to on the free tier, else null

Organization tools

With an API key, five more tools return data scoped to your own organization. Same wire format; nothing here is visible to other organizations or to the free tier.

Search your analyses

search_analyses

The AI relevance analyses Bizmoon produced for your organization: severity, urgency, affected areas, recommended actions.

severityurgencyareacategorykeyworddays

Read one analysis

get_document_details

Full analysis by analysisId: key provisions, compliance deadlines, funding details, and the underlying document.

analysisId

Upcoming deadlines

get_compliance_deadlines

Compliance deadlines extracted from your analyses, with days remaining and overdue flags.

days

Watchlist matches

get_watchlist_matches

Documents that matched your organization's watchlists recently.

days

Funding for you

get_funding_opportunities

Grant and funding analyses relevant to your organization, with deadlines and funding details.

days

REST API

Two doors to the same data. The MCP server is built for AI agents: tools, natural-language friendly, free tier included. The REST API is plain HTTP for your own code: the organization tools as JSON endpoints, always key-authenticated. One bm_sk_ key opens both.

MethodPathReturns
POST/analyses/searchSearch your organization's policy analyses
GET/analyses/{id}One analysis in full, with the underlying document
GET/deadlinesUpcoming compliance deadlines
GET/fundingFunding opportunities for your organization
GET/watchlist/matchesRecent watchlist matches
GET/reportsGenerated compliance reports
curl -s https://bizmoon.ai/api/v1/deadlines \
  -H "authorization: Bearer bm_sk_..."

Base URL https://bizmoon.ai/api/v1, machine-readable spec at /api/v1/openapi.json. Limits: 60 requests per minute per key, 1,000 per day per organization. Public regulatory search is MCP-only; use the MCP server (or a scheduled agent) for that.

Errors

Failures come back as normal tool results with isError: true and a JSON payload your agent can read and act on. The three shapes:

Rate limited

{
  "error": "rate_limited",
  "retryAfterSeconds": 42,
  "tier": "anon",
  "upgrade": "https://bizmoon.ai/pricing"
}

Tool failed

{
  "error": "tool_failed",
  "message": "Unknown jurisdiction \"California\". Use US_FED or a two-letter state code such as CA."
}

Not found

{
  "error": "not_found",
  "id": "999999999"
}

An invalid API key is the one HTTP-level failure: status 401 (or 403 for a plan without MCP access) with a JSON body { "error": "..." }.

Bizmoon

Product

  • Bizmoon agent
  • MCP server
  • Grants
  • Regulations
  • License checker
  • Guides
  • How it works
  • Pricing
  • Blog

Industries

  • Healthcare
  • Trade and Commerce
  • Transportation and Logistics
  • Energy and Utilities
  • Finance and Banking
  • Land and Natural Resources
  • Agriculture

Coverage

  • All grants
  • All regulations
  • Federal grants
  • Federal regulations

Company

  • Careers
  • Sign in
© 2026 BizmoonPrivacyTermsCredits