Commertize Agents MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Commertize Agents MCP Servershow me multifamily offerings in Texas under $5M"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Commertize Agents — MCP Server
The MCP server for Commertize Agents. It exposes Commertize's public marketplace data — offerings, news, sponsor listings, platform reference text — as typed tools any MCP-compatible agent can call directly, instead of scraping commertize.com.
Every tool registered by default is a read, and none needs a credential. Further
tools exist in this codebase and are NOT registered by default — get_disclosure_package,
the two sponsor-services writes (request_memo, file_sponsor_inquiry), and the
sandbox_* / x402_* groups — each behind its own explicit opt-in flag. See
What is actually live and Configuration.
Commertize is a digital capital markets platform for real-world assets. Sponsors list offerings on it, and investors complete identity verification on the platform before they can take part. This server is the read surface of that platform, nothing more.
Free. No API key. No account. Every default tool reads a route that is public and
unauthenticated on api.commertize.com. Nothing in this server is an offer, a
solicitation, or a recommendation, nothing here can transact, and the disclaimer travels
with every response.
What is actually live
Verified against api.commertize.com on 2026-09-10 by direct probe. A route that exists
answers 200/400/401 or a JSON 404; the plain-text 404 Not Found below is the
unmounted-route default.
Tool | Backing route | Production |
|
| 200 |
|
| 200 (unknown slug: JSON 404) |
| none — reads a local file | n/a |
|
| 404, not mounted — gated OFF |
|
| 404, not mounted — gated OFF |
|
| 404, not mounted — gated OFF |
The gated tools' code, schemas and tests are complete and unchanged; only their registration is switched off. The rule is the one this server already applied to the sandbox and paid-data groups: a tool that can only 404 teaches a machine reader that the platform is broken rather than that the capability is not offered.
Related MCP server: agentcrush
Tools
Nine tools are registered by default, all reads. Every tool is listed below; the ones that are off by default are marked.
Marketplace & content (7):
Tool | Input | Returns |
|
| The public offering set: asset class, city/state, status, exemption type, sponsor, tokenomics, derived offering size, SPV leverage disclosure. |
|
| One offering's full public detail. |
|
| One publishable offering's SIGNED machine-readable disclosure package — terms, waterfall, covenants, risk factors, attestations, minimum investment, transfer-restriction profile and reason codes — every field with a provenance and an as-of, plus the Ed25519 signature, key id, verification endpoints and a PDF rendered from the same data. Assets under evaluation are never served. Off by default, like the offerings tools; the API endpoint is itself flag-gated ( |
|
| Published news and market commentary — headlines, summaries, categories, links. |
|
| One article's full body as plain text. |
| — | Curated "what is Commertize / what can an agent do here" reference text. Call this one first. |
Screening & comparison (4):
Tool | Input | Returns |
| free-text query + asset class / geography / status / exemption filters + numeric range filters (cap rate, cash-on-cash, IRR, equity multiple, hold period, lockup, offering size, minimum ticket, SPV leverage) | The filtered public set, sortable on any numeric field. Undisclosed values never silently match a range filter — they land in |
| 2–5 | Field-by-field comparison across offerings, with per-field disclosure/agreement counts — two undisclosed values are reported as two absences, never as agreement. |
| — | Every sponsor with a public offering: count, status/asset-class breakdown, states, summed target raise where disclosed. This is an inventory of platform listings, not a track record. |
|
| One sponsor's public listing record. Not a track record — prior deals, realized returns, AUM and verification status are not public data and are named as unavailable, not guessed at. |
Sponsor services — writes, OFF in the default build:
Neither tool below is registered unless its flag is set explicitly. The default public
build is the read-only tool set above; platform_info reports read_only: true.
Tool | Opt-in flag | Input | Returns |
|
|
| Files a request for a written feasibility read on an asset your principal controls. The memo goes to the address your credential was registered to and cannot be directed anywhere else — there is no recipient parameter. Returns the request id and the receipt time. Without a key the tool refuses and says so rather than silently filing nothing. |
|
| principal contact details + agent attribution | Files a sponsor inquiry about the principal's own asset. Returns the inquiry id and acceptance time; nothing else is promised. |
What makes this safe to hand to an arbitrary agent
Public data only. Every route backing these tools has no auth middleware — verified route-by-route against the backend source, not assumed.
No write tool by default. As this server ships, every registered tool is a read and
platform_inforeportsread_only: true— a value derived from the registered write list, not asserted. If a write gate is opened, the write tools file a request about the caller's OWN asset;request_memotakes no recipient address, so it cannot be used to mail a third party. Nothing in this server can subscribe, transfer, claim a distribution, or commit anyone to anything, and there are no credentials in the codebase — any agent key is read from the environment and only ever sent to Commertize's own API.Honest nulls. A missing value is
nulland named innot_disclosed. Never0, never a guess, never filled from a comparable.Provenance on every response.
as_of(fetch time, not call time),source_url, cache metadata, and a standing disclaimer ride along with every payload.Never fabricates on failure. An upstream outage returns a typed error, never an empty list dressed up as "no offerings."
Offering tools are off by default.
list_offeringsandget_offeringreturn data only whenCOMMERTIZE_MCP_ENABLE_OFFERINGS=1is explicitly set; a missing or malformed value keeps them off. When enabled, any offering structured under Rule 506(b), which does not permit general solicitation, carries an explicit non-solicitation note.
Install
Claude Code
claude mcp add commertize -- node /absolute/path/to/mcp-server/dist/index.js(Build from source first — see From source.)
Any client using an mcpServers config block
{
"mcpServers": {
"commertize": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"]
}
}
}From source
git clone https://github.com/Commertize-Inc/mcp-server.git
cd mcp-server
npm ci
npm run build
node dist/index.jsThe server speaks MCP over stdio; node dist/index.js is the command every client
config above points at (use the absolute path to dist/index.js).
Or point the official inspector at it directly:
npx @modelcontextprotocol/inspector node dist/index.jsStreamable HTTP transport (remote MCP)
The same server over the MCP Streamable HTTP transport, for clients that connect to a URL instead of spawning a process. It runs where you run it: start it yourself and point your client at the address you bind.
node dist/httpMain.js # 127.0.0.1:3920 by default# a client, once an instance is reachable at <url>:
claude mcp add --transport http commertize <url>/mcp --header "Authorization: Bearer <agent key>"What is different over HTTP, by design:
Every request needs a key.
Authorization: Bearer cfa_…, the agent-platform key format. The key is verified against the API named byCOMMERTIZE_API_BASE_URLatCOMMERTIZE_MCP_KEY_INTROSPECT_PATH(200 with the matchingkey_id= yes; 401/403 = no; anything else, or no answer, = 503 and the request is refused). There is no anonymous mode and no "skip verification" switch. The route itself requires a service secret (COMMERTIZE_MCP_INTROSPECT_SECRET, sent asx-commertize-introspect-secret); without one this server refuses every call with 503 and never calls upstream, and a route that refuses OUR secret is reported as "cannot verify", never as "bad key".Caching, both ways, bounded. A verified key is trusted for at most 15 s (
COMMERTIZE_MCP_KEY_VERIFY_CACHE_MS, hard ceiling 15 000 — an environment can lower it, not raise it) and never past theexpires_atthe route reported, so a revoked key works for at most 15 s. A refused key is remembered forCOMMERTIZE_MCP_KEY_NEGATIVE_CACHE_MS(30 s) so a flood of one bad key costs one upstream call per window; a revocation is honoured at the first re-check, at most 15 s away, and then remembered the same way.Per-IP verification brake. Requests whose key is not answered from cache count against the client's address (
x-vercel-forwarded-for, thenx-real-ip, then the socket; never the caller-settablex-forwarded-for):COMMERTIZE_MCP_HTTP_VERIFY_PER_IP_PER_MIN(20) per minute, then 429 before any upstream call. The route's own Postgres-counted ceilings (per IP, per key, global) are the ceiling that holds across serverless instances; this brake is the first, free one.The surface is an allowlist (
src/httpAllowlist.ts): the read tools plusfile_sponsor_inquiry.request_memo, the simulation venue and the paid-data rail are not registered over HTTP whatever their gates say, and atools/callnaming any of them — or any unknown name — is HTTP 403 with a loggedtool_refusedevent, before the MCP server sees it.Per-key ceilings:
COMMERTIZE_MCP_HTTP_RPMrequests per minute (60) andCOMMERTIZE_MCP_HTTP_INQUIRIES_PER_HOURinquiries per hour (2), each 429 withRetry-After. In-memory and per process: on a serverless platform every warm instance counts on its own. The API's own per-IP limits remain the floor.CORS is off. No
Access-Control-*header is ever sent;OPTIONSis 405. A key pasted into a web page cannot be used from a browser.Stateless. Each POST builds a fresh server and transport and tears them down. No sessions, no SSE streams:
GET /mcpis 405. Clients must sendAccept: application/json, text/event-stream(the SDK and Claude Code do).GET /healthanswers 200 with the version, transport andverifier_configured, needs no key, and names no upstream.Structured log, one JSON object per request on stderr: method, path, the key's public id, JSON-RPC methods, tool name, status, outcome, duration. Never the key, a header, or a body.
api/mcp.js, api/health.js and vercel.json are a serverless packaging of the same
handler, for self-hosting.
Configuration (all optional; sane defaults point at production)
Variable | Default | Purpose |
|
| Upstream API. |
|
| Fresh-response window. |
| unset (tools return no offering data) | Set to |
| unset ( | Set to |
| unset ( | Set to |
| unset ( | Agent credential from |
| unset ( | Set to |
|
| Bind address of |
|
| Path on |
| unset (every HTTP request is 503; no upstream call) | Service secret the introspection route requires. Never logged or served. |
|
| How long a verified key is trusted before re-checking; also bounded by the reported |
|
| How long a refused key is remembered without re-asking. |
|
| Per-client-IP ceiling on verification attempts (cache misses) per minute. |
|
| Per-key ceilings over HTTP. |
|
| Largest JSON-RPC body accepted over HTTP. |
| unset ( | Absolute path of |
| unset (not registered) | Opt-in for the |
Tests
npm testRuns the offline, screener, sandbox, x402, HTTP and banned-language suites. The
live-network suite is opt-in: COMMERTIZE_MCP_LIVE_TESTS=1 npm test, or
npm run test:live on its own.
License
Apache-2.0. This is the open half of Commertize's open-core split: the public edge
(this server, the agent skill, llms.txt) is open source; the venue itself — onboarding,
KYC, custody, settlement, everything that actually transacts — is not.
Links
Platform: https://commertize.com
Public API: https://api.commertize.com
Agent skill: https://github.com/Commertize-Inc/agent-skill
Nothing in this repository, or returned by any tool in it, is an offer, a solicitation, or a recommendation to buy or sell any security, or investment, legal, or tax advice.
Available Tools
9 toolscompare_offeringsCompare Commertize offerings side by sideARead-only
Align two to five public offerings field by field: asset class, geography, status, exemption, sponsor, tokenomics, derived offering size, SPV leverage and sponsor projections. Each row reports how many of the compared offerings disclose the field, whether they agree, and whether only some disclose it. Two nulls are reported as two absences, never as agreement. Ids come from list_offerings or search_offerings. Informational reference data — not an offer, solicitation, or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| offering_ids | Yes | Two to five offering UUIDs. Comparison rows follow this order. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| error | Yes | Null on success. Populated when the call failed. |
| not_found | Yes | Requested ids with no public offering. Present so a comparison of 4 is never silently a comparison of 3. |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
| offering_ids | Yes | |
| offering_names | Yes | |
| differing_fields | Yes | Fields every offering discloses and on which they differ. |
| undisclosed_by_all | Yes | Fields NO compared offering discloses. The shape of the data gap, stated rather than left as a column of nulls. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavioral semantics not in annotations: how each row aggregates disclosure counts, agreement, and partial disclosure, and the notable rule that two nulls are treated as two absences rather than agreement.
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?
Front-loaded with the action and field list, then the row-semantics rule, then the ID source, then the legal disclaimer. It is dense but each sentence earns its place; the disclaimer is slightly tangential but justified for a financial reference tool.
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?
With an output schema present, the description need not explain return values, and it correctly focuses on the aggregation semantics the agent must interpret. It is complete for invocation; only an explicit when-not-to-use note is missing.
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 coverage is 100% and the single parameter is fully documented, so the baseline is 3. The description adds value beyond the schema by naming the upstream tools that supply the UUIDs, which the schema does not state.
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 a specific verb (align/compare) and resource (two to five public offerings) and enumerates the exact fields compared, so the agent knows precisely what output to expect. It also implicitly distinguishes itself from list_offerings/search_offerings, which it names only as ID sources rather than peers.
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 where offering_ids come from (list_offerings or search_offerings), which is the key prerequisite. It does not state when not to use the tool or contrast it with get_offering for single-offering lookups, so it falls just short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_articleGet one Commertize articleARead-only
Full published text of a single Commertize news or commentary article, by slug (from get_news). Markup and embedded metadata are stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Article slug, e.g. "ai-in-cre-asset-management-from-rent-rolls-to-returns". |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| error | Yes | Null on success. Populated when the call failed. |
| article | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds genuine behavioral value beyond that: markup and embedded metadata are stripped, telling the agent what form the returned text takes. Permissions or rate limits are not mentioned, keeping this out of 5 territory.
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?
A single tightly worded sentence with no redundancy; the resource identity is front-loaded and the output-transformation note follows 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?
With one required, fully documented parameter, an output schema present, and annotations covering the safety profile, the description supplies everything an agent needs to call this correctly. Return-value details are rightly left to the output schema.
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 baseline is 3. The description goes slightly beyond the schema by stating where the slug originates ('from get_news') and confirming the parameter selects a single article, which aids correct invocation beyond the schema's format example.
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 names a specific resource and scope: 'Full published text of a single Commertize news or commentary article, by slug'. An agent can immediately distinguish this from the list-oriented sibling get_news, which is explicitly cited as the slug's source.
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?
It gives clear context for use by stating the slug comes 'from get_news', which routes the agent through the correct sibling first. It stops short of explicit when-not guidance (e.g., when to prefer a listing tool for multiple articles), so it is clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsGet Commertize news and market commentaryARead-only
Published news and market commentary from Commertize: tokenization, real-world assets, digital capital markets infrastructure, and regulation. Returns headlines and summaries; use get_article for a full body. Commertize's own editorial view, not independent research.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of articles. Default 20, upstream max 100. | |
| query | No | Case-insensitive substring filter over title and summary. Applied locally to the fetched set, not a search index. | |
| category | No | Filter by category label, case-insensitive substring match, e.g. "Tokenization", "Regulation". |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| count | Yes | |
| error | Yes | Null on success. Populated when the call failed. |
| articles | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful context beyond that: the return granularity (headlines and summaries, not full bodies) and the editorial provenance ('Commertize's own editorial view, not independent research'), which signals potential source bias to the agent.
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 tight sentences with no filler. Topic scope, return shape/alternative routing, and source caveat are each front-loaded in that order of importance.
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?
An output schema exists so return values need no elaboration, and annotations cover the safety profile. Between the topic scope, the headline-vs-full-body distinction, the sibling handoff, and the editorial bias caveat, an agent has everything needed to select and call this tool correctly.
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 all three parameters (limit, query, category) are fully documented in the schema, including the local-substring semantics of query. The description adds no parameter-level detail beyond the schema, so the baseline of 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?
Names a specific verb and resource ('Published news and market commentary from Commertize') and instantly scopes the subject matter (tokenization, RWAs, digital capital markets, regulation). It also distinguishes itself from the sibling get_article by stating that this returns headlines and summaries only.
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 routes the agent: 'use get_article for a full body'. That is a clear alternative-with-condition. It does not, however, state when this tool should be preferred over unrelated siblings like list_offerings or search_offerings, nor any exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_offeringGet one Commertize offeringARead-only
Full PUBLIC detail for a single offering by id, including tokenomics and the SPV leverage disclosure where the sponsor has provided one. The complete listing record (documents, sponsor diligence, street address, funding progress) is authenticated and is NOT available through this server. Informational reference data — not an offer, solicitation, or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| offering_id | Yes | Offering UUID, as returned by list_offerings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| error | Yes | Null on success. Populated when the call failed. |
| firewall | Yes | Which offerings this server may publish is decided by the Commertize backend, not here. This states the authority, when it was read, and how much it withheld. |
| offering | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
| public_fields_only | Yes | Always true. Assembled from the public listing endpoint; authenticated detail fields are absent, not null-because-undisclosed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description carries the rest and does well: it distinguishes public reference data from authenticated diligence data, notes the SPV disclosure is conditional on sponsor provision, and adds a legal disclaimer that matters for downstream reporting. It stops short of stating error behavior for a missing or invalid id.
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 front-loaded sentences that lead with what is returned before qualifying what is not. The closing disclaimer is boilerplate but defensible for a financial-reference tool; nothing is redundant.
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?
An output schema exists, so return values need not be described, and the description still covers scope, exclusions, and data provenance. What is missing is only peripheral: behavior on a nonexistent id and whether results are cached or rate-limited.
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 single parameter is documented there as a UUID 'as returned by list_offerings'. The description only echoes 'by id', adding no format or edge-case detail beyond the schema, so the 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 a specific verb and resource ('Full PUBLIC detail for a single offering by id') and enumerates the payload scope (tokenomics, SPV leverage disclosure). It also explicitly rules out the authenticated listing record, which cleanly separates it from list_offerings and the full-record siblings an agent might otherwise expect.
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?
Clear context for use: fetch one offering when you already have its id. The negative scoping ('the complete listing record ... is NOT available through this server') tells the agent when this tool will not satisfy a need, but it never names an alternative tool or endpoint to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sponsorGet one Commertize sponsorARead-only
One sponsor's public record, by id or by name substring: which offerings they have listed on Commertize, broken down by status, asset class and geography. NOT A TRACK RECORD — Commertize's sponsor endpoint is authenticated, so no prior deals, realized returns, AUM, principals or verification status are available through this server, and the response names each of those absences explicitly rather than omitting them. Informational reference data — not an offer, solicitation, or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| sponsor | Yes | Sponsor id (exact, as returned on an offering) or a case-insensitive substring of the sponsor's business name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| error | Yes | Null on success. Populated when the call failed. |
| sponsor | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
| ambiguous_matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only readOnlyHint and openWorldHint; the description adds substantial behavioral context beyond them — that the endpoint is authenticated, that prior deals, realized returns, AUM, principals and verification status are unavailable, and that absences are stated explicitly rather than omitted. It also discloses the informational, non-solicitation nature of the data.
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 content is front-loaded with the core scope and the key caveat before the ancillary disclaimers. It is dense but each clause carries distinct information; the final sentence is a boilerplate disclaimer that earns slightly less than the rest.
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?
Even though an output schema exists, the description usefully sets expectations about what the response contains and, unusually, what it deliberately declares absent. Combined with the single-parameter schema, an agent has everything needed to call it correctly and interpret the result.
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 already documents both the exact-id and case-insensitive-substring forms, so the description's 'by id or by name substring' is essentially a restatement. It adds no syntax or matching-behavior detail beyond the schema, so the baseline of 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 a specific verb+resource ('One sponsor's public record') and enumerates what the record contains (offerings by status, asset class, geography). It clearly distinguishes itself from list_sponsors and get_offering by scoping to a single sponsor and by the explicit 'NOT A TRACK RECORD' framing.
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?
It gives clear context on the lookup key ('by id or by name substring') and an explicit when-not ('NOT A TRACK RECORD') tied to the authenticated endpoint's limits. It does not, however, route the agent to specific siblings such as list_sponsors or search_offerings when a lookup fails or when multiple sponsors are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_offeringsList Commertize marketplace offeringsARead-only
List the real-world-asset offerings currently on the Commertize marketplace, with public terms: asset class, location, status, exemption, sponsor, tokenomics, and derived offering size. Public data only; no authentication. Filters are applied to the public set, they do not widen it. Informational reference data — not an offer, solicitation, or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of offerings to return. Default: all. | |
| state | No | Filter by US state code, e.g. "WA". Case-insensitive. | |
| status | No | Filter by listing status. The public set only ever contains these three. | |
| asset_class | No | Filter by asset class code, e.g. "MULTIFAMILY", "HOSPITALITY", "OFFICE". Case-insensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| count | Yes | Number of offerings returned after filtering. |
| error | Yes | Null on success. Populated when the call failed. |
| firewall | Yes | Which offerings this server may publish is decided by the Commertize backend, not here. This states the authority, when it was read, and how much it withheld. |
| offerings | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
| total_available | Yes | Number of offerings in the set this server may publish, before the caller's own filters. NOT the size of the marketplace — offerings outside the Rule 506(c) set are withheld and are not counted here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds real value on top by disclosing the no-auth public scope, the constraining (non-widening) filter behavior, and that offering size is a derived field. It stops short of describing pagination or result limits, which is the only remaining behavioral gap.
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 tightly packed sentences that front-load the resource, then the access model, then the filter semantics. The closing disclaimer about informational reference data earns its place in a marketplace context and nothing is redundant.
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?
With an output schema present, the description needn't explain return values, and it covers the remaining essentials: scope of the dataset, authentication model, filter semantics, and legal framing. An agent has everything required to invoke it correctly.
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 every parameter, including the status enum, is documented in the schema, so the baseline is 3. The description's 'filters are applied to the public set, they do not widen it' adds a semantic constraint on filter behavior, but it does not explain any individual parameter's syntax or defaults.
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 names a specific verb and resource ('List the real-world-asset offerings currently on the Commertize marketplace') and enumerates the public terms returned, so the agent knows exactly what this tool fetches without opening the schema. It does not explicitly differentiate itself from the sibling search_offerings or compare_offerings, leaving the agent to infer the distinction.
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?
It gives clear operating context: public data only, no authentication required, and filters narrow rather than widen the result set. However, it never states when to choose this tool over search_offerings or get_offering, so the routing guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sponsorsList sponsors on the Commertize marketplaceARead-only
Every sponsor with a public offering on Commertize, with what they have listed here: offering count, breakdown by status and asset class, states, and the summed target raise across only those offerings that disclose one. This is an INVENTORY OF PLATFORM LISTINGS, not a track record: no prior-deal, realized-return, AUM or principal data exists on any public Commertize endpoint, and every response names what is unavailable. Informational reference data — not an offer, solicitation, or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| basis | Yes | |
| cache | Yes | Cache metadata for this response. |
| count | Yes | |
| error | Yes | Null on success. Populated when the call failed. |
| sponsors | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
| unattributed_offerings | Yes | Public offerings whose sponsor stub carries neither an id nor a name. Counted, never folded into a pseudo-sponsor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior beyond them: it clarifies that only offerings with public listings appear, that target raise is summed only over offerings that disclose one, and that every response names unavailable data fields.
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?
Front-loads the returned fields before the caveats, which is the right ordering. It is a dense single block and the final 'not an offer, solicitation, or recommendation' clause is boilerplate, but overall it is efficiently packed.
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?
With an output schema present, the description needn't explain return shape, and it instead supplies the interpretive framing an agent needs: what constitutes a sponsor here, which aggregates are conditional, and which data classes are absent platform-wide.
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?
The tool takes zero parameters, so the schema carries nothing to misinterpret and the baseline is 4. The description correctly implies there is no filtering input, describing the response scope instead.
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 a specific verb+resource ('Every sponsor with a public offering on Commertize') and enumerates exactly what each row contains (offering count, status/asset-class breakdown, states, summed target raise). An agent can distinguish this list-of-sponsors tool from siblings like get_sponsor and list_offerings without opening the schema.
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?
Strong scoping about what the dataset covers and explicitly rules out track-record attributes (prior-deal, realized return, AUM, principal). However, it never routes the agent between this and get_sponsor for a single sponsor or list_offerings, so tool-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
platform_infoAbout CommertizeARead-only
Curated reference text an agent should read before using the other tools: what Commertize is, what it lists, how offerings are structured, how investor and sponsor verification works, and exactly what agents can and cannot do through public interfaces. Static text, not live data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| error | Yes | Null on success. Populated when the call failed. |
| markdown | Yes | |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| source_url | Yes | The upstream public API URL this response was derived from. |
| capabilities | Yes | Machine-readable summary of this server's surface. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context by stating the content is static reference text rather than live data, and by summarizing the covered topics, though it does not discuss return format or permissions (the output schema handles returns).
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?
A single front-loaded sentence carries the purpose, the when-to-use instruction, the enumeration of content areas, and the static-vs-live distinction without any wasted clauses. Every part earns its place.
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 parameterless documentation tool with annotations covering safety and an output schema covering returns, the description supplies everything an agent needs: what it is, what it contains, and when to read it. No gaps remain.
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?
With zero parameters, there is no parameter semantics to convey, so the baseline of 4 applies. The description correctly does not attempt to invent parameter details.
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 resource (curated reference text about Commertize) and enumerates exactly what topics it covers, distinguishing it from the sibling tools that list, get, or search live data. An agent can immediately tell this is background/context material rather than an operational tool.
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?
It explicitly says an agent 'should read before using the other tools' and contrasts this with 'Static text, not live data', giving clear when-to-use and when-not guidance. The alternative is implicitly all live-data siblings, which is sufficient for a documentation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_offeringsScreen Commertize offerings by criteriaARead-only
Screen the public Commertize offering set: free-text search plus asset class, geography, status and exemption filters, plus inclusive min/max ranges on cap rate, year-1 cash-on-cash, target IRR, equity multiple, hold period, lockup, offering size, minimum ticket and SPV leverage, with sorting on any numeric field. Rates are DECIMAL FRACTIONS (0.06 = 6%). Undisclosed values never match a range filter and are returned in excluded_not_disclosed rather than silently dropped; field_coverage reports how many candidates disclose each figure at all, so an empty result is explainable. Public data only, filters narrow the public set and never widen it. Informational reference data — not an offer, solicitation, or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City substring, case-insensitive — some listings name two towns. | |
| limit | No | Maximum offerings to return after filtering and sorting. | |
| order | No | Sort direction. Default desc. | |
| query | No | Case-insensitive substring over name, city, state, sponsor name and asset class. Applied locally to the fetched public set — not a search index. | |
| state | No | US state code, e.g. "WA". Exact, case-insensitive. | |
| status | No | The public set only ever contains these three statuses. | |
| sort_by | No | Numeric field to sort by. One of: cap_rate, year_1_cash_on_cash, target_irr, target_equity_multiple, preferred_rate, hold_period_years, lockup_months, token_price, tokens_for_investors, target_raise, min_investment_amount, implied_equity_valuation, effective_appraisal_value, spv_leverage_ratio. Offerings that do not disclose it sort LAST in both directions. | |
| sponsor | No | Sponsor id (exact) or a case-insensitive substring of the sponsor name. | |
| exemption | No | Exemption code, e.g. "RULE_506_B", "RULE_506_C", "REG_A". Exact, case-insensitive. | |
| asset_class | No | Asset class code, e.g. "MULTIFAMILY", "HOSPITALITY". Exact, case-insensitive. | |
| max_cap_rate | No | Maximum cap_rate, inclusive. Undisclosed values never match. | |
| min_cap_rate | No | Minimum cap_rate, inclusive. Undisclosed values never match. | |
| max_target_irr | No | Maximum target_irr, inclusive. Undisclosed values never match. | |
| min_target_irr | No | Minimum target_irr, inclusive. Undisclosed values never match. | |
| max_target_raise | No | Maximum target_raise, inclusive. Undisclosed values never match. | |
| min_target_raise | No | Minimum target_raise, inclusive. Undisclosed values never match. | |
| max_lockup_months | No | Maximum lockup_months, inclusive. Undisclosed values never match. | |
| min_lockup_months | No | Minimum lockup_months, inclusive. Undisclosed values never match. | |
| accepting_investment | No | True selects only offerings open to new subscriptions (status ACTIVE). | |
| max_hold_period_years | No | Maximum hold_period_years, inclusive. Undisclosed values never match. | |
| min_hold_period_years | No | Minimum hold_period_years, inclusive. Undisclosed values never match. | |
| max_spv_leverage_ratio | No | Maximum spv_leverage_ratio, inclusive. Undisclosed values never match. | |
| min_spv_leverage_ratio | No | Minimum spv_leverage_ratio, inclusive. Undisclosed values never match. | |
| max_year_1_cash_on_cash | No | Maximum year_1_cash_on_cash, inclusive. Undisclosed values never match. | |
| min_year_1_cash_on_cash | No | Minimum year_1_cash_on_cash, inclusive. Undisclosed values never match. | |
| max_min_investment_amount | No | Maximum min_investment_amount, inclusive. Undisclosed values never match. | |
| min_min_investment_amount | No | Minimum min_investment_amount, inclusive. Undisclosed values never match. | |
| max_target_equity_multiple | No | Maximum target_equity_multiple, inclusive. Undisclosed values never match. | |
| min_target_equity_multiple | No | Minimum target_equity_multiple, inclusive. Undisclosed values never match. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO-8601 timestamp of when the underlying data was fetched from the API — not when this call was made. Older than a few seconds means it was served from cache. |
| cache | Yes | Cache metadata for this response. |
| count | Yes | Offerings returned after every filter. |
| error | Yes | Null on success. Populated when the call failed. |
| offerings | Yes | |
| sorted_by | Yes | |
| truncated | Yes | True when `limit` cut the result short. |
| candidates | Yes | Survivors of the non-numeric filters, before range filters. |
| disclaimer | Yes | Standing disclaimer. Carry it into anything you report to a user. |
| sort_order | Yes | |
| source_url | Yes | The upstream public API URL this response was derived from. |
| field_coverage | Yes | How many candidates disclose each numeric field at all. |
| unknown_fields | Yes | Field names in sort_by that this server does not know. Reported, then ignored — never silently treated as a no-match. |
| field_catalogue | Yes | Every numeric field, where it lives in an offering record, its unit and whether it is a disclosure, a derivation or a projection. |
| total_available | Yes | Size of the public set before any filter. |
| excluded_by_criteria | Yes | Dropped because a DISCLOSED value failed a range test. |
| excluded_not_disclosed | Yes | Dropped because a filtered field is undisclosed. Unknown, not non-matching — worth a look if the criteria matter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnlyHint/openWorldHint annotations: it declares the decimal-fraction convention for rates, that undisclosed values never match a range filter and are surfaced in `excluded_not_disclosed` instead of dropped, and that `field_coverage` explains empty results. Sort-last behavior for undisclosed sort fields is also disclosed.
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?
Front-loads the core purpose in the first clause, then adds only high-value caveats (rate units, non-disclosure handling, public-only scope). Dense but every sentence carries information; the long opening clause is the only mild readability cost.
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 29-parameter, zero-required screening tool with an output schema, this covers exactly what the schema cannot: unit conventions, filter semantics, and the existence/meaning of `excluded_not_disclosed` and `field_coverage`. An agent has enough to call and interpret it correctly.
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 coverage is already 100%, so the baseline is 3, but the description adds genuinely non-schema semantics: rates are decimal fractions (0.06 = 6%), undisclosed values never match ranges, and sorting works on any numeric field. That materially changes how an agent sets the min/max parameters.
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 a specific verb ('Screen') and resource ('public Commertize offering set') and enumerates the filter families it supports. Reads clearly as a filtered-search tool, distinguishable from list_offerings (plain list) and get_offering (single record) among the siblings.
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?
Explains the semantics of use ('public data only', 'filters narrow the public set and never widen it') and the informational nature, but never names an alternative or states when NOT to use it (e.g., versus list_offerings or compare_offerings). Usage is implied rather than routed.
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.
9 tool updates
v0.1.0- First observed
compare_offerings - First observed
get_article - First observed
get_news - First observed
get_offering - First observed
get_sponsor - First observed
list_offerings - First observed
list_sponsors - First observed
platform_info - First observed
search_offerings
TDQS
Scored across 9 tools
Most tools have distinct targets: offerings (list/get/search/compare), sponsors (list/get), news (list/get), and static reference. The only real overlap is list_offerings vs search_offerings, since both can apply filters to the public offering set, but search_offerings is clearly differentiated by free-text search and numeric-range screening.
Consistent snake_case with a predictable verb_noun pattern (list_*, get_*, search_*, compare_*). The lone deviation is platform_info, which uses a noun phrase without a verb, but it remains readable and clearly scoped.
Nine tools is well-scoped for a read-only marketplace data server, with offerings, sponsors, news, and a platform primer each earning their place without redundancy.
The surface covers the full read-only lifecycle for the stated public domain: list/get/search/compare offerings, list/get sponsors, list/get news, plus a static primer. No writes or authenticated data exist, which is by design, though a dedicated asset-class or exemption enumeration is a minor gap.
Maintenance
Related MCP Connectors
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
Read-only search over 1,706 AI agent tools and 239 MCP servers. No sign-up needed.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceSafe, read-only market data for AI trading agents, offering 44 tools to query prediction markets, perpetuals, and cross-venue signals without the ability to execute trades.1MIT- FlicenseNot gradedqualityBmaintenanceProvides protocol-neutral market intelligence for the AI agent economy, with read-only tools to search agents, retrieve details and histories, compare agents, list categories, view category rankings, and access methodology.-
- AlicenseNot gradedqualityAmaintenanceLets any MCP-speaking assistant look up SEC filings and fundamentals, 13F holdings, insider trades, BDC loan books, and U.S. government reference data from Treasury, FRED, FDIC, USAspending, USPTO and CFTC, with the source named on every answer. Most of its 29 tools run keyless against public sources, giving citations-backed answers without an account.116 PyPIMIT
- AlicenseBqualityAmaintenanceEnables credential-free, read-only access to selected public market-data routes via 13 typed MCP tools covering asset mapping, metadata, quotes, listings, global metrics, Fear & Greed, Altcoin Season, and CMC index data.13MIT