polymarket-mcp
Click on "Install 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., "@polymarket-mcpFind active markets about the Fed rate decision"
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.
polymarket-mcp
AI-agent ready FastMCP server for Polymarket market discovery, wallet analytics, and public CLOB data.
polymarket-mcp gives MCP clients a typed, read-only interface for asking questions like:
"Find active markets about inflation and summarize liquidity."
"Inspect this wallet's current positions and recent activity."
"Compare order book depth, midpoint, and spread for these outcome tokens."
"Pull historical prices so an agent can reason about market movement."
This project is intentionally read-only in 0.1.x. It does not place trades, sign orders, manage keys, or require wallet credentials.
Package identities
Purpose | Value |
PyPI distribution |
|
Python package |
|
CLI command |
|
Docs |
Related MCP server: polymarket-mcp
Why agents use it
Typed outputs reduce brittle prompt parsing and normalize inconsistent upstream JSON.
Tool docstrings are written for LLM routing, so agents can choose the right surface quickly.
Namespaces keep workflows clear:
gammafor discovery,datafor wallets,clobfor live market microstructure.Real MCP end-to-end tests exercise both in-process client sessions and subprocess stdio transport.
No authenticated trading actions are exposed, which keeps exploratory agents inside a safer read-only boundary.
Agent workflow
flowchart LR
Agent["AI agent / MCP client"] --> MCP["polymarket-mcp"]
MCP --> Gamma["gamma: discover markets and events"]
MCP --> Data["data: inspect wallets and trades"]
MCP --> Clob["clob: read books, quotes, history"]
Gamma --> GAPI["Gamma API"]
Data --> DAPI["Data API"]
Clob --> CAPI["Public CLOB API"]Tool surfaces
Surface | Agent job | Example outputs |
| discover and inspect markets/events | market metadata, event details, tags |
| analyze public wallet behavior | positions, activity, trades |
| reason about live prices and liquidity | books, quotes, midpoint, spread, history |
Install
pip install polymarket-mcp-server
polymarket-mcpRun ephemerally with uvx:
uvx --from polymarket-mcp-server polymarket-mcpMCP client config
Use this stdio entry in an MCP client configuration:
{
"mcpServers": {
"polymarket": {
"command": "uvx",
"args": ["--from", "polymarket-mcp-server", "polymarket-mcp"]
}
}
}Local development
This repository uses PDM.
pdm install -G dev
pdm install -G docs
pdm run mcp-inspect # inspect the composed MCP surface
pdm run mcp-run # run the stdio MCP server
pdm run test # run pytest
pdm run test-mcp # run real MCP client/server e2e tests
pdm run all # tests + strict docs + MCP inspectRun the package entrypoint directly:
pdm run python -m polymarket_mcp.serverSafety model
polymarket-mcp is built for research, monitoring, and agent reasoning over public data. It intentionally excludes:
private key handling
authenticated trading
order placement or cancellation
wallet mutation
custody or signing flows
If you build a trading layer on top, keep it separate from this read-only server and require explicit human authorization.
Project layout
src/polymarket_mcp/
models/ Pydantic domain and tool I/O models
services/ upstream API normalization layers
servers/ FastMCP tool and resource surfaces
server.py composed parent MCP server
tests/ unit and MCP end-to-end coverage
docs/ Sphinx documentationDocumentation
Hosted docs: https://polymarket-mcp.readthedocs.io/en/latest/
Docs source:
docs/using native Sphinx reStructuredTextLocal build:
pdm run docsLocal preview:
pdm run docs-serve
Release notes
Releases publish from Git tags through GitHub Actions trusted publishing. PyPI trusted publishing is configured for pr1m8/polymarket-mcp, workflow release.yml, environment pypi.
Available Tools
22 toolsclob_get_bookA
Fetch the current order book for one token.
Use this tool when the user wants live market microstructure such as bids, asks, depth, spread, or liquidity around the current price.
Prefer this tool over get_price when depth matters, not just the current
quote. Do not use this tool for market discovery; Gamma tools are better
for finding the right market or token first.
The input should be a single CLOB token ID, not a market slug or wallet address. A common next step is to summarize book depth or compare books across multiple tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Single-token lookup arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| book | Yes | Normalized public order book. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the input type (single CLOB token ID) and output concept (order book). It also hints at typical usage patterns. Missing details like error behavior or response size, but sufficient for the tool's simplicity.
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?
Five sentences, each distinct and purposeful: purpose, usage context, when to prefer, input clarification, and common next step. No redundant phrases.
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 output schema exists (context signals), the description covers purpose, usage, input constraints, and typical follow-up actions. For a single-parameter tool, this is complete.
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?
Input schema has 100% coverage; the description adds value by clarifying that the token_id is a CLOB token ID, not a market slug or wallet address. This goes beyond the schema's basic description of 'Single-token lookup arguments'.
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 starts with a clear action ('Fetch the current order book for one token'), specifying the verb and resource. It differentiates from sibling tools by implying it's for a single token, contrasting with the plural 'clob_get_books'.
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 states when to use: for live market microstructure (bids, asks, depth, spread, liquidity). Provides when-not: 'Do not use this tool for market discovery'. Recommends over 'get_price' when depth matters, and suggests common next steps (summarize depth or compare books).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clob_get_booksA
Fetch current order books for multiple tokens.
Use this tool when the user wants to compare liquidity or depth across several known tokens at once.
Prefer this tool over repeated single-token lookups when you already know multiple token IDs. Do not use this tool if you still need to identify which market or token is relevant.
The input should be a list of CLOB token IDs. A common next step is to rank the returned books by spread, depth, or visible liquidity.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Multi-token lookup arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation but does not explicitly state idempotency, safety, or authorization. Lacks behavioral details beyond the basic fetch.
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?
Concise and front-loaded with the primary action. The description uses bullet-like structure for usage guidance, though not strictly formatted. Efficient with no wasted words.
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 output schema exists, the description adequately explains the tool's purpose and usage. It hints at next steps ('rank by spread, depth, or visible liquidity'), making it complete for a multi-token fetch 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 coverage is 100%, so the schema already documents the parameter. The description adds 'CLOB token IDs' but does not explain formatting or constraints beyond the schema.
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 states the action 'Fetch current order books' and the resource 'multiple tokens'. It distinguishes from the sibling tool 'clob_get_book' which is for single tokens.
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 states when to use (compare liquidity/depth across several tokens) and when not to use (if still need to identify token). Prefers over repeated single-token lookups, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clob_get_midpointA
Fetch the midpoint for one token.
Use this tool when the user specifically wants the midpoint rather than a full order book or generic quote.
Prefer this tool when reasoning about fair value between best bid and best
ask. If depth matters too, use get_book instead.
The input should be a single CLOB token ID.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Single-token lookup arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| quote | Yes | Normalized price quote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It notes the input is a single CLOB token ID, but does not disclose what happens if the token is invalid, any side effects, or rate limits. It is adequate for a simple fetch operation.
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 concise with only 5 sentences, directly stating the purpose and usage guidelines. It could be slightly more streamlined but is well-structured and front-loaded.
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 tool's low complexity, single parameter, and presence of an output schema, the description adequately covers when to use it. It does not describe the return value, but that is handled by 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?
The input schema has 100% coverage with one parameter (args.token_id). The description reiterates that it takes a single token ID, adding no new semantic meaning beyond the schema.
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 explicitly states 'Fetch the midpoint for one token', using a specific verb and resource that clearly defines the tool's function. It distinguishes itself from siblings like get_book by focusing on the midpoint rather than the full order book.
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?
X The description provides clear guidance on when to use this tool ('when the user specifically wants the midpoint') and when not to ('if depth matters too, use get_book instead'). It also recommends using it for reasoning about fair value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clob_get_priceA
Fetch a current price quote for one token.
Use this tool when the user wants the current quoted price or implied level for a known token but does not need the full order book.
Prefer this tool over get_book when a lightweight spot quote is enough.
Prefer get_midpoint or get_spread when the question is specifically
about those metrics.
The input should be a single CLOB token ID. A common next step is to compare the quote with historical prices or fetch the full book.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Single-token lookup arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| quote | Yes | Normalized price quote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies a read-only operation (fetch), mentions 'lightweight', and suggests a typical next step, but does not detail side effects or error handling.
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?
Four short, relevant sentences front-loaded with purpose, then usage guidelines, then input clarification, then typical next step. No wasted words.
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 price-fetch tool with one parameter and an output schema, the description covers purpose, usage, input, and next step. Missing explicit mention of error cases, but complexity is low.
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% with basic description. The description adds that input is a single CLOB token ID, which is slightly more specific than schema, but does not provide novel semantics beyond what schema offers.
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?
Description clearly states it fetches a current price quote for one token, with specific verb and resource. It distinguishes from siblings by calling it a 'lightweight spot quote' compared to full order book tools.
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 says when to use (user wants current quoted price for known token, no need for full book) and gives alternatives: prefer over get_book, prefer get_midpoint or get_spread for specific metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clob_get_price_historyA
Fetch historical price points for one token.
Use this tool when the user wants trend, momentum, or time-series context for a known token.
Prefer this tool over get_price when the question is about change over
time rather than the current quote. Do not use this tool if the token ID is
not yet known; use Gamma discovery first.
The input should be a single CLOB token ID plus an interval and optional time bounds. A common next step is to summarize the trend or compare recent history with the current quote or spread.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Historical price query arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token_id | Yes | |
| interval | Yes | |
| points | No | |
| count | Yes | Return the number of history points. Returns: int: Number of returned points. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes the tool as reading historical data (implying safe operation) and specifies input constraints. However, it does not explicitly state the operation type or potential side effects, but the context is sufficient for a read-oriented tool.
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 concise at five sentences, each serving a clear purpose: purpose, usage condition, preference over sibling, exclusion condition, and next steps. No fluff, front-loaded with key action.
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 tool's simplicity, output schema existence, and full schema coverage, the description is nearly complete. It covers when to use, input, and a typical follow-up. It lacks explicit mention of return format or data limits, but these are handled by 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 coverage is 100%, so the schema already describes parameters. The description adds value by explaining the input structure ('single CLOB token ID plus an interval and optional time bounds') and the default interval, complementing the schema without redundancy.
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 states 'Fetch historical price points for one token' and distinguishes from sibling get_price by specifying it is for change over time. It also clarifies that the token ID must be known, differentiating from Gamma discovery tools.
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?
Provides explicit when-to-use ('trend, momentum, or time-series context'), when-not-to-use (if token ID unknown, use Gamma discovery), and an explicit alternative (prefer over get_price for historical queries).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clob_get_pricesA
Fetch current price quotes for multiple tokens.
Use this tool when the user wants a quick multi-token quote snapshot without needing full order books for each token.
Prefer this tool over repeated single-token quote calls when several token IDs are already known. Do not use this tool for discovery or wallet-level analysis.
The input should be a list of CLOB token IDs. A common next step is to rank
tokens by price or follow up with get_book on the most interesting ones.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Multi-token lookup arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| quotes | No | |
| count | Yes | Return the number of quotes. Returns: int: Number of returned quotes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions 'quick multi-token quote snapshot' implying idempotent read, and clarifies input as 'CLOB token IDs'. However, it does not explicitly state behavioral traits like idempotency, freshness, or response structure. Still adequate for a simple read tool.
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 concise (under 100 words) and front-loaded with the primary action. Each sentence serves a purpose: action, usage context, preference advice, exclusion, input format, and next step. No wasted words.
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 tool's simplicity (1 parameter, output schema present), the description covers all necessary aspects: purpose, usage context, input specification, and common follow-ups. No gaps identified.
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% (1 parameter, args with token_ids array). The description adds meaning by specifying 'list of CLOB token IDs', which goes beyond the schema's description of 'Multi-token lookup arguments.' It clarifies the type of identifiers expected.
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 states 'Fetch current price quotes for multiple tokens.' It uses a specific verb ('Fetch') and resource ('current price quotes for multiple tokens'), distinguishing it from siblings like clob_get_price (single token) and clob_get_books (full order books).
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 provides when-to-use: 'Use this tool when the user wants a quick multi-token quote snapshot without needing full order books.' Also advises preferring it over repeated single-token calls and explicitly excludes discovery or wallet-level analysis. Suggests a next step (rank tokens or follow up with get_book).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clob_get_spreadA
Fetch the spread for one token.
Use this tool when the user specifically wants transaction tightness, execution quality hints, or a quick liquidity proxy.
Prefer this tool over get_book when only the spread is needed. If the
user wants depth and book shape too, use get_book.
The input should be a single CLOB token ID.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Single-token lookup arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| quote | Yes | Normalized price quote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It identifies the tool as a read-only fetch (though not explicitly stated), and clarifies it returns spread only. Could be more explicit about no side effects.
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?
Four concise sentences, front-loaded with purpose. No unnecessary words. Efficient and clear.
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?
Output schema exists, so return values are covered. Description covers purpose, usage guidance, and parameter meaning. Lacks information on error behavior or token existence, but adequate for a simple fetch 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 has one required parameter 'token_id' with minLength. Description adds that input is a single CLOB token ID, providing context beyond the schema. Schema coverage is 100%, so baseline is 3; description adds value by specifying the token type.
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?
Clearly states 'Fetch the spread for one token' and specifies use cases like transaction tightness and liquidity proxy. Distinguishes from sibling clob_get_book.
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 advises when to use (spread/tightness needs) and when to use clob_get_book instead (depth/book shape). Gives clear preference over get_book for spread-only queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_get_activityA
Fetch recent activity for one wallet.
Use this tool when the user wants to know what a wallet has been doing recently, including buying, selling, or other account-level actions.
Prefer this tool over get_positions when the question is about recent
behavior rather than current holdings. Prefer get_trades when the user
specifically wants trade rows rather than broader account activity.
The input should be a wallet address, typically in 0x... format. A
common next step is to inspect affected markets through Gamma or CLOB tools.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Wallet query arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes | |
| activity | No | |
| count | Yes | Return the number of activity rows. Returns: int: Number of returned rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It mentions fetching activity including buying/selling but omits behavioral traits like auth needs, rate limits, or pagination. The tool is likely read-only but not explicitly stated.
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?
Concise 6-sentence paragraph, no redundant phrases, front-loaded with main purpose. Every sentence adds value.
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?
Covers purpose, parameter format, and typical next step. Lacks explicit mention of output structure, but the tool has an output schema. For a simple data fetch tool, it is fairly complete.
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?
Despite 100% schema coverage, the schema only describes 'args' object. The description adds semantics by specifying input format ('wallet address in 0x...'), which is absent from the schema, adding value beyond baseline 3.
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 states 'Fetch recent activity for one wallet' with a specific verb and resource. It distinguishes from siblings by explicitly naming 'get_positions' and 'get_trades' and explaining when to use each.
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?
Provides explicit usage guidance: 'Use this tool when the user wants to know what a wallet has been doing recently...', 'Prefer this tool over get_positions...', 'Prefer get_trades when...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_get_closed_positionsA
Fetch closed positions for one wallet.
Use this tool when the user wants completed or no-longer-open positions, such as reviewing realized exposure or prior bets.
Prefer this tool over get_positions when historical closed exposure is
specifically requested. A common next step is get_activity or
get_trades to explain how the wallet entered and exited those markets.
The input should be a wallet address, typically in 0x... format.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Wallet query arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes | |
| positions | No | |
| count | Yes | Return the number of positions. Returns: int: Number of returned positions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While no annotations are provided, the description implies a read-only operation ('Fetch closed positions') and the tool name suggests data retrieval. However, it does not explicitly state that the tool has no side effects or mention rate limits, authorization, or pagination behavior. It is adequate but could be more explicit.
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 concise (3 sentences) and well-structured: it states the core purpose, provides usage guidance and sibling differentiation, suggests next steps, and specifies input format. Every sentence adds value without redundancy.
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 tool with one parameter and an output schema present, the description covers all essential aspects: core functionality, usage context, input format, and relation to sibling tools. No missing information is critical for an agent 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?
The input schema has 100% coverage with the 'user' parameter described as 'Wallet query arguments.' The description adds value by specifying the expected format as a wallet address typically in '0x...' format, which is not present in the schema. This clarifies the parameter beyond the schema's minimal description.
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 states the tool fetches closed positions for one wallet, and explicitly distinguishes it from the sibling 'get_positions' tool by specifying that it should be used for historical closed exposure. This provides specific verb+resource+scope differentiation.
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 provides explicit when-to-use guidance (user wants completed or no-longer-open positions, historical closed exposure specifically requested) and suggests common next steps ('get_activity' or 'get_trades'), offering clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_get_positionsA
Fetch current positions for one wallet.
Use this tool when the user wants to know what a wallet currently holds, which markets it is exposed to, or its current directional footprint.
Prefer this tool over get_activity when the question is about present
state rather than historical actions. Do not use this tool if you still
need to discover which market exists; that belongs to Gamma tools.
The input should be a wallet address, typically in 0x... format. A
common next step is get_activity for recent changes or CLOB/Gamma tools
for deeper inspection of the markets referenced by the positions.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Wallet query arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes | |
| positions | No | |
| count | Yes | Return the number of positions. Returns: int: Number of returned positions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must convey behavior. It implies a read-only query by 'fetch current positions,' but does not explicitly state idempotency or side effects. Still, it is clear and sufficient for this type of tool.
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 moderately concise, containing multiple sentences but each serving a purpose: definition, usage, input format, and next steps. It is front-loaded with essential 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?
Given the tool's simplicity (one parameter, with output schema), the description covers all necessary aspects: what it does, when to use it, input format, and typical follow-up actions. It is complete for an agent's decision-making.
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 only parameter is 'user' within 'args'. The schema describes 'args' as 'Wallet query arguments' but not 'user'. The description adds value by specifying the format ('wallet address, typically in 0x... format'), compensating for the schema's lack of detail.
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 states 'Fetch current positions for one wallet,' specifying the verb, resource, and scope. It distinguishes from siblings like 'data_get_closed_positions' and 'data_get_activity' by focusing on current positions.
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?
Provides explicit when-to-use ('know what a wallet currently holds'), when-not-to-use ('if you still need to discover which market exists'), and an alternative tool ('prefer over get_activity'). This offers clear guidance for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_get_tradesA
Fetch trade rows for a wallet or market filter.
Use this tool when the user wants trade-level records rather than current holdings or general wallet activity. This is useful for detailed flow analysis and execution history.
Prefer this tool over get_activity when exact trade rows matter. Prefer
Gamma tools when you still need to discover the right market first.
The input can include a wallet address, a market filter, or both, depending on what the user already knows. A common next step is to summarize the trade flow or compare it with current positions.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Trade query arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trades | No | |
| count | Yes | Return the number of trades. Returns: int: Number of returned trades. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It correctly implies this is a read operation ('fetch') but does not detail pagination, ordering, or rate limits. The mention of 'trade rows' and filtering by wallet/market is helpful but not comprehensive.
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 five sentences, front-loaded with the core purpose, then usage guidelines, alternatives, input flexibility, and a common next step. Every sentence contributes meaningfully with no redundancy.
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 tool's complexity (trade rows, filtering by wallet/market), the description adequately covers the purpose and usage. It mentions common next steps, which is helpful. However, it omits ordering details and constraints like date ranges, but the output schema likely compensates for return values.
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 reported as 100%, so the baseline is 3. The description adds value by explaining that input can include wallet, market, or both depending on what the user knows, and mentions a common next step, providing context beyond the schema's property descriptions.
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 starts with a specific verb+resource: 'Fetch trade rows for a wallet or market filter.' It clearly distinguishes from siblings by stating 'Use this tool when the user wants trade-level records rather than current holdings or general wallet activity' and explicitly contrasts with 'get_activity' and Gamma tools.
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 provides explicit when-to-use context: 'when the user wants trade-level records... for detailed flow analysis and execution history.' It also gives when-not-to-use guidance: 'Prefer Gamma tools when you still need to discover the right market first' and names the alternative tool 'get_activity' for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_get_event_by_slugA
Fetch one canonical event by its slug.
Use this tool when you already know the event slug and want the full event-level context, including any nested markets returned by Gamma.
Prefer this tool when the question is about an event grouping rather than a
single market. If you only know the topic in natural language, use
search_public or list_events first.
The slug should be the event slug string from the Polymarket URL path, not the full URL. This tool is especially helpful for finding all related markets under one event before selecting a specific market for deeper analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Canonical event slug from a Polymarket event URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | Yes | Normalized Polymarket event model. Args: id: Optional upstream event identifier. slug: Canonical event slug from Polymarket URLs. title: Human-readable event title. active: Whether the event is currently active. closed: Whether the event is closed. markets: Nested normalized markets associated with the event. Returns: Event: Normalized event model. Raises: ValueError: If validation fails. Examples: >>> event = Event(slug="fed-event", title="Fed Event") >>> event.title 'Fed Event' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it returns full event-level context including nested markets, and clarifies that the slug is the URL path part not full URL. With no annotations, this is sufficient for a read operation, though additional details like error handling or return format could be added.
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 about six sentences, each serving a purpose: purpose, usage guidance, additional clarifications. No redundant or excessive text.
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 tool has one parameter and an output schema exists, the description fully covers when, how, and what to expect. It provides all necessary context for an agent to use 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?
The input schema covers the parameter with a basic description. The tool description adds context about the slug format (URL path, not full URL), which is meaningful beyond the schema. Baseline 3 due to high coverage, but extra details warrant a 4.
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 uses a specific verb 'Fetch' and resource 'canonical event' with the identifier 'slug'. It distinguishes from siblings by noting it returns nested markets and is for event grouping, not single markets.
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 states when to use (when you know the slug, need event context) and when not (if only know topic, use search_public or list_events first). Provides clear alternatives and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_get_market_by_slugA
Fetch one canonical market by its slug.
Use this tool when you already know the exact market slug and want the clearest single-market lookup. This is the preferred tool after a search step has identified the correct market.
Do not use this tool for broad discovery across a topic; use
search_public or list_markets first in that case. The slug should
be the market slug string from the Polymarket URL path, not the full URL.
This tool is often followed by CLOB book or price lookups if you want live market state, or by event lookup if you want the parent event context.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Canonical market slug from a Polymarket market URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| market | Yes | Normalized Polymarket market model. Args: id: Optional upstream market identifier. slug: Canonical market slug from Polymarket URLs. question: Human-readable market question text. active: Whether the market is currently active. closed: Whether the market is closed. liquidity: Reported liquidity value when present. volume: Reported volume value when present. event_slug: Parent event slug when known. clob_token_ids: Associated CLOB token identifiers, if available. Returns: Market: Normalized market model. Raises: ValueError: If validation fails. Examples: >>> market = Market(slug="fed-decision", question="Will the Fed cut?") >>> market.slug 'fed-decision' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It clarifies the operation is a fetch (read-only), specifies slug format (not full URL), but does not disclose potential errors, rate limits, or auth requirements. However, the output schema exists, reducing need for return format details.
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?
Four sentences, front-loaded with main purpose, then usage guidance, caveat, and follow-up hints. No redundant or irrelevant 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 simple lookup tool with one parameter and an output schema, the description covers purpose, usage, parameter meaning, and typical follow-ups. Complete given the context signals.
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 description adds value by explaining 'Canonical market slug from a Polymarket market URL' and emphasizing it's the path slug, not full URL. This context goes beyond schema.
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?
Description explicitly states 'Fetch one canonical market by its slug', which is a specific verb+resource. It distinguishes from sibling tools like gamma_search_public and gamma_list_markets by noting it's for exact slug lookup after a search step.
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?
Provides clear when-to-use ('when you already know the exact market slug'), when-not-to-use ('Do not use... for broad discovery'), and alternatives ('use search_public or list_markets first'). Also suggests follow-up tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_list_eventsA
List or filter event groups that contain one or more markets.
Use this tool when you want broader event-level discovery rather than individual market-level discovery. Events often provide better context for finding clusters of related markets under one theme.
Prefer this tool over list_markets when the user asks about a broader
topic and you want grouped context first. Prefer get_event_by_slug when
you already know the exact event slug.
Event results may include nested market objects, which makes this tool a good starting point for collecting related market slugs and token IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Structured event filter arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | No | |
| count | Yes | Return the number of returned events. Returns: int: Number of returned events. Raises: None. Examples: >>> ListEventsOutput(events=[]).count 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description notes that results may include nested market objects, which adds some transparency. However, it does not disclose any behavioral traits like read-only nature, rate limits, or authentication requirements.
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?
Description is concise (5 sentences) and front-loaded, each sentence adds value. No redundant or wasted words.
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 presence of an output schema, the description does not need to explain return values. It provides context about nested market objects. However, it lacks mention of pagination or result limits.
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% (the 'args' parameter is described in the schema). The tool description does not add additional information about the parameters beyond what the schema already 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 clearly states it lists or filters event groups containing markets. It distinguishes from sibling tools like list_markets and get_event_by_slug by specifying when to use each.
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 recommends this tool for broader event-level discovery and when the user asks about a broader topic. Advises against using it when exact slug is known (use get_event_by_slug) or for individual markets (use list_markets).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_list_marketsA
List or filter markets when you already have structured constraints.
Use this tool when you want market discovery with explicit filters such as active-only results, a tag ID, a series slug, or an exact slug. This is more structured than free-text search.
Prefer this tool over search_public when you already know the filtering
dimension. Prefer get_market_by_slug when you already know the exact
market slug and want a single canonical result.
A slug should be the Polymarket slug string from the URL, not the full URL
itself. This tool returns normalized market objects that may include
clob_token_ids for later live-price lookups in the CLOB server.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Structured market filter arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| markets | No | |
| count | Yes | Return the number of matching markets. Returns: int: Number of returned markets. Raises: None. Examples: >>> SearchMarketsOutput(query="x", markets=[]).count 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return format (normalized market objects with clob_token_ids for later lookups) and clarifies slug format (not full URL). No annotations, so description carries full burden; adds useful behavioral context beyond schema.
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?
Seven sentences, well-structured with purpose upfront and usage guidelines. Slightly long but every sentence adds value. Could be more concise but not wasteful.
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?
Covers filtering dimensions, slug clarification, and sibling differentiation. Output schema exists, so return details are not needed. Missing some context like pagination behavior, but limit parameter covers that.
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 has high top-level coverage (100% for args), but subparameters lack descriptions. Description only adds meaning for slug parameter ('slug should be...'). Baseline 3 is appropriate.
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?
Clearly states 'List or filter markets when you already have structured constraints.' Distinguishes from search_public (free-text) and get_market_by_slug (single slug). Verb+resource with scope.
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 says when to use (structured filters), when to prefer search_public (free-text) and get_market_by_slug (exact slug). Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_list_seriesA
List available series metadata for structured discovery.
Use this tool when the user refers to a known series or recurring grouping and you need series metadata before filtering markets with a series slug.
Prefer this tool when discovery is series-oriented rather than free-text
topic-oriented. For general search, use search_public instead.
Args: None.
Returns: list[dict[str, object]]: Raw series payloads from Gamma.
Raises: httpx.HTTPError: If the upstream Gamma request fails.
Examples: .. code-block:: python
series = await list_series()| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It documents return type as list[dict] and raises HTTPError, but omits details on pagination, rate limits, or authorization requirements. Adequate but not rich.
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?
Well-structured with clear sections (description, usage, args, returns, raises, examples). Front-loaded summary, no redundant information, and every sentence serves a purpose.
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 zero parameters and presence of output schema, the description fully covers return type, error conditions, and provides an example. It is comprehensive for the tool's simplicity.
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 has zero parameters, and the description explicitly states 'Args: None.' Since schema coverage is 100% with no parameters, the description adds no semantic value beyond the schema, but baseline 4 is appropriate per guidelines.
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 states the tool lists series metadata for structured discovery, specifying verb and resource. It distinguishes from siblings by contrasting series-oriented vs free-text topic-oriented discovery and naming search_public as an alternative.
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 advises use when the user refers to known series or needs metadata before filtering markets. Provides preference direction over search_public, but lacks explicit when-not-to-use or other sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_list_sportsA
List sports metadata for sports-related discovery flows.
Use this tool when the user is exploring sports markets and you need sport metadata before narrowing to teams, events, or markets.
Prefer this tool when the question is explicitly sports-oriented. For a
direct market/topic search, search_public is usually a faster first
step.
Args: None.
Returns: list[dict[str, object]]: Raw sports payloads from Gamma.
Raises: httpx.HTTPError: If the upstream Gamma request fails.
Examples: .. code-block:: python
sports = await list_sports()| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose additional behavioral traits beyond listing and returning payloads. Mentions potential HTTPError but lacks details on rate limits, data size, or side effects.
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?
Well-structured with clear purpose and usage, but slightly verbose due to included code example. Could be trimmed without loss of essential info.
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?
Covers purpose, usage, return type, and error handling. For a parameterless tool with simple output, description is complete and sufficient.
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?
No parameters, schema coverage 100%, description adds nothing beyond schema. Baseline 4 is appropriate as no additional param info is needed.
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?
Clearly states verb 'list' and resource 'sports metadata', distinguishes from siblings by specifying sports discovery flow and explicitly differentiating from search_public for direct market searches.
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 states when to use (exploring sports markets needing metadata before narrowing) and when not to (direct market/topic search), and provides alternative tool (search_public).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_list_tagsA
List available discovery tags for category-based exploration.
Use this tool when you need category metadata such as politics, crypto, or sports-style groupings and want to drive a later structured market query.
Prefer this tool before list_markets when the user wants markets from a
category but you do not yet know the numeric tag identifier. Once the tag
is known, switch to a structured market listing tool.
Args: None.
Returns: list[dict[str, object]]: Raw tag payloads from Gamma.
Raises: httpx.HTTPError: If the upstream Gamma request fails.
Examples: .. code-block:: python
tags = await list_tags()| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the return type ('list[dict[str, object]]: Raw tag payloads') and notes possible HTTPError. Although it doesn't explicitly declare read-only or non-destructive behavior, the nature of listing tags implies safety. Slightly more clarity on side effects would justify a 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 well-structured with a one-sentence summary followed by usage guidance, args, returns, raises, and an example. It is front-loaded and every sentence adds value without redundancy.
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 tool's simplicity (0 parameters, no annotations, output schema exists), the description covers all necessary aspects: purpose, usage context, return type, error cases, and a code example. It feels complete and actionable.
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 has zero parameters with 100% schema coverage. The description explicitly states 'Args: None', which adds clarity. Baseline for no parameters is 4, and the description meets that.
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 states the verb 'List' and resource 'discovery tags for category-based exploration'. It distinguishes from sibling tools like gamma_list_markets by specifying that this tool is for obtaining category metadata (e.g., politics, crypto) before querying markets with a numeric tag identifier.
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 when to use this tool ('when you need category metadata') and when to prefer it over list_markets ('before list_markets when you do not yet know the numeric tag identifier'). It also advises switching to a structured market listing tool once the tag is known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_list_teamsA
List team metadata for sports-market exploration.
Use this tool when a sports workflow needs team-level metadata before finding related events or markets.
Prefer this tool after identifying a sport or when the user explicitly asks about teams. For non-sports discovery, use other Gamma tools instead.
Args: None.
Returns: list[dict[str, object]]: Raw team payloads from Gamma.
Raises: httpx.HTTPError: If the upstream Gamma request fails.
Examples: .. code-block:: python
teams = await list_teams()| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses the return type, potential HTTPError, and shows usage via example. Could be improved by explicitly stating it is a safe read-only operation, but overall behavior is clear.
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 well-structured with a purpose statement, usage guidance, args/returns/raises, and an example. Every sentence adds value without unnecessary verbosity.
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 zero-parameter tool with an output schema, the description covers purpose, usage context, error handling, and provides an example. It is complete and self-contained.
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?
No parameters exist, so the description does not need to add parameter-level information. Given zero parameters, baseline is 4.
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 states it lists team metadata for sports-market exploration, distinguishing it from siblings by specifying the domain (sports) and context (after identifying a sport or when explicitly asked about teams).
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 states when to use this tool: 'when a sports workflow needs team-level metadata before finding related events or markets' and advises against using it for non-sports discovery, directing to other Gamma tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gamma_search_publicA
Search Polymarket discovery data by free-text topic.
Use this tool when you know a topic or phrase but do not yet know the exact market slug. This is the best first step for queries like "Fed decision", "NBA finals", or "election odds".
Prefer this tool over get_market_by_slug when you only have a natural
language description. Prefer list_markets when you already have a more
structured filter such as a known tag or exact slug.
The query should be plain human text, not a full URL. The result
returns normalized markets that can be followed up with
get_market_by_slug for a more precise single-market lookup. If you need
live pricing or the order book next, use the CLOB public server after you
obtain the market's token IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | Structured free-text search arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| markets | No | |
| count | Yes | Return the number of matching markets. Returns: int: Number of returned markets. Raises: None. Examples: >>> SearchMarketsOutput(query="x", markets=[]).count 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description implies read-only search behavior and mentions normalized market results, but does not explicitly disclose auth requirements, rate limits, or side effects.
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?
Description is well-structured, front-loaded with purpose, then usage guidance and preferences, without unnecessary words.
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?
Covers usage context, alternatives, query format, follow-up actions, and relies on output schema for return details, making it complete for a search 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 coverage is 100%; description adds that query should be plain text (not URL), enhancing the schema's minimal info. Limit is not elaborated, but overall adds value.
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 states the tool searches Polymarket discovery data by free-text topic, and distinguishes from siblings by specifying when to use this tool versus get_market_by_slug and list_markets.
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 instructs to use when a topic is known but not the exact slug, gives example queries, and advises preferring this over alternatives with clear conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesARead-only
List all available resources and resource templates.
Returns JSON with resource metadata. Static resources have a 'uri' field, while templates have a 'uri_template' field with placeholders like {name}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds value by explaining the return format (static vs templates) without contradicting annotations.
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?
Two sentences, front-loaded with the core purpose, and every sentence adds value without repetition.
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?
The description fully covers the tool's functionality for a simple list operation with no parameters, given the annotations and lack of complexity.
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?
No parameters exist, and schema coverage is 100%, so the description is not required to add parameter details; baseline 4 is appropriate.
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 states it lists all available resources and resource templates, distinguishing from sibling 'read_resource' which reads a single resource.
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 use for discovery before reading, but does not explicitly state when not to use or provide alternatives beyond the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_resourceARead-only
Read a resource by its URI.
For static resources, provide the exact URI. For templated resources, provide the URI with template parameters filled in.
Returns the resource content as a string. Binary content is base64-encoded.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The URI of the resource to read |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that content is returned as string (binary base64-encoded), and differentiates URI types. No contradictions.
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, well-structured sentences with clear front-loading. Every sentence provides essential information without redundancy.
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?
Complete for a simple one-param tool with output schema. Covers URI types and return format. No missing aspects.
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 describes 'uri' as resource URI. Description adds meaningful context by differentiating static vs templated URIs, improving parameter understanding beyond schema.
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 'Read a resource by its URI' with clear verb and resource. Distinguishes from sibling 'list_resources' (which lists all resources). Additionally explains static vs templated URIs.
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?
Provides clear context by specifying that static resources require exact URI and templated ones need filled parameters. No explicit when-not-to-use or alternatives, but guidance is sufficient for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools are clearly separated by prefixes (clob_, data_, gamma_) and each has a distinct purpose. Even similar sounding tools like clob_get_price, clob_get_midpoint, and clob_get_spread have well-defined differences described in their help text.
All tools follow a consistent snake_case pattern with a domain prefix and verb_noun structure (e.g., clob_get_book, data_get_positions, gamma_list_events). The only exceptions are the standard MCP resources tools which are minor and acceptable.
With 22 tools, the count is slightly above the typical 3-15 range but is justified by the need to cover market discovery (Gamma), live pricing (CLOB), and user data (Data). The set feels well-scoped for a comprehensive data-oriented MCP server.
The tools cover market discovery, live order book data, price history, and user positions/activity/trades thoroughly. However, there are no write operations such as placing orders or creating markets, which may be intentional but leaves a gap for trading workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Polymarket MCP — prediction-market data via Gamma + CLOB public APIs.
Hosted MCP for Kalshi prediction markets: search, odds, order books, settlement rules, and trading.
Live Polymarket data for agents: markets, insider-scored whale trades, leaderboards, wallet P&L
Read-only MCP server for live Polymarket, Kalshi, Limitless odds; Manifold sentiment.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for investigating Polymarket wallets, markets, and cross-wallet patterns using 21 tools backed by public APIs and an optional SQLite cache.MIT
- AlicenseAqualityBmaintenanceA read-only MCP server exposing Polymarket's public prediction-market data. Search markets, read live odds and order books, pull historical probability time-series, and inspect public wallet positions.14MIT
- AlicenseBqualityAmaintenanceMCP server for Polymarket prediction markets enabling query of markets, events, narratives, arbitrage, and more via MCP or HTTP.9MIT
- AlicenseBqualityCmaintenanceMCP server to query Polymarket prediction market data via The Graph subgraphs and REST APIs, enabling AI agents to search markets, get live prices, order books, on-chain analytics, and trader profiles.32130MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pr1m8/polymarket-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server