Limitless MCP
Limitless Subgraphs + MCP Server
Subgraphs and MCP server for Limitless Exchange prediction markets on Base.
Why Subgraphs?
The Limitless REST API is useful for market metadata (titles, descriptions, categories) but has significant limitations for analytics:
Rate limited — max 2 concurrent requests, 300ms minimum delay between calls, 429s on bursts
No historical aggregation — no way to query total protocol volume, trade counts over time, or cross-market analytics
No on-chain depth — the API doesn't expose individual trade fills, position balances, splits/merges/redemptions, or resolution payouts
Subgraphs solve all of this. They index every on-chain event into a queryable GraphQL API with no rate limits, full historical data, and flexible aggregation. The MCP server combines both — subgraphs for the heavy analytics, REST API for market names and metadata.
Why market names aren't in the subgraphs
Market titles and descriptions are stored off-chain in the Limitless database — they are not emitted in any on-chain event. Unlike Polymarket, which uses UMA's QuestionInitialized event to embed question text in ancillaryData on-chain, Limitless uses a GnosisSafe multisig as the oracle address. The multisig calls prepareCondition directly on the CTF contract with no accompanying event that carries the question text. The questionId in the CTF's ConditionPreparation event is a bytes32 hash, not readable text.
This means there is no on-chain source a subgraph can index for market names. The MCP server bridges this gap by joining subgraph data (via conditionId) with the Limitless REST API for titles and metadata.
Related MCP server: Graph AAVE MCP
Subgraphs
Two subgraphs indexing different exchange venues on the same CTF (Conditional Tokens Framework):
Subgraph | What it indexes |
| Binary Yes/No markets — CTF Exchange v1/v2/v3 |
| Multi-outcome category markets — NegRisk Exchange v1/v2/v3 |
Both share the same CTF contract (0xC9c9...) for conditions, positions, splits, merges, and redemptions. Each indexes its own set of exchange contracts for markets and trades.
Entities
Condition — prepared markets with oracle, resolution status, payouts
Market / NegRiskMarket — exchange-registered markets with volume, trade counts, fees
Trade (immutable) — individual order fills with maker/taker, price, USD amounts
UserPosition — per-user token balances and PnL
Split / Merge / Redemption (immutable) — CTF liquidity events
User — aggregated trader stats
MarketDailySnapshot / GlobalDailySnapshot — daily time series
GlobalStats — protocol-wide singleton
Contracts
Simple Markets:
Contract | Address | Start Block |
CTF |
| 15,916,136 |
Exchange V1 |
| 26,043,405 |
Exchange V2 |
| 39,507,768 |
Exchange V3 |
| 39,598,606 |
NegRisk Markets:
Contract | Address | Start Block |
CTF |
| 15,916,136 |
NegRisk Exchange V1 |
| 28,018,020 |
NegRisk Exchange V2 |
| 39,508,390 |
NegRisk Exchange V3 |
| 39,598,827 |
Example Queries
# Global stats
{
globalStats(id: "0x73696d706c65") {
totalMarkets resolvedMarkets totalTradesCount
totalVolumeUSD totalFeesUSD totalUsers
}
}
# Recent trades with market info
{
trades(first: 10, orderBy: timestamp, orderDirection: desc) {
type maker taker amountUSD price venue timestamp
market { id tradesCount volumeUSD }
}
}
# User positions
{
userPositions(where: { user: "0x..." , balance_gt: "0" }) {
tokenId balance netCostUSD realizedPnlUSD
condition { id resolved payoutNumerators }
}
}MCP Server
An MCP server that combines both subgraphs with the Limitless REST API for market names and metadata. Every tool queries the subgraphs for on-chain data.
Tools (18)
Tool | Description |
| Combined protocol stats across both market types |
| Full market detail — on-chain stats + metadata |
| Keyword/category search with subgraph enrichment |
| Trade feed for a specific market |
| Daily volume/trades/fees for a market |
| Top position holders for a market |
| Creation → trading → resolution lifecycle |
| Trader stats merged across both subgraphs |
| Leaderboard by volume, trades, or fees |
| Trader's recent trades with market names |
| Trader's portfolio with balances and PnL |
| Daily time series across both market types |
| Simple vs NegRisk side-by-side comparison |
| Splits, merges, and redemptions feed |
| Unified activity feed (trades + liquidity events) |
| Browse conditions with resolution status |
| GraphQL schema introspection |
| Raw GraphQL escape hatch |
Setup
cd mcp-server
npm install
npm run buildClaude Code Config
{
"mcpServers": {
"limitless": {
"command": "node",
"args": ["/path/to/limitless-subgraphs/mcp-server/build/index.js"],
"env": {
"GRAPH_API_KEY": "your_graph_api_key",
"LIMITLESS_API_KEY": "lmts_your_key_here"
}
}
}
}API Keys
GRAPH_API_KEY(required) — needed to query the subgraphs via The Graph. Get one at thegraph.com/studio/apikeysLIMITLESS_API_KEY(optional) — enables market name/metadata enrichment from the Limitless REST API. Without it, market browsing and search still work (public endpoints). Generate one at limitless.exchange → profile menu → Api keys. Key format:lmts_.... Pass viaX-API-Keyheader. See the Limitless API docs for full details.
Note: The Limitless REST API is rate limited to 2 concurrent requests with 300ms minimum delay. The subgraphs have no such limits, which is why the MCP routes all analytics queries through them and only uses the REST API for metadata.
Available Tools
18 toolscompare_market_typesB
Side-by-side comparison of simple vs negrisk market performance. Shows volume share, trade counts, fees, and activity breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations provided, the description carries the full burden of disclosure. It compensates for the missing output schema by listing specific return fields (volume share, trade counts, fees, activity breakdown), but omits critical behavioral details such as authentication requirements, rate limits, data freshness, or whether the operation is read-only.
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 consists of two tightly constructed sentences where the first establishes the core purpose and the second enumerates the return data, with no redundant language or tautological restatement of the tool name.
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 absence of parameters, annotations, and output schema, the description provides minimum viable coverage by specifying the comparison scope and output metrics, though it lacks context on data aggregation scope (timeframes, market universe coverage) and behavioral characteristics.
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 contains zero parameters, establishing a baseline score of 4. The description adequately implies that no user input is required to perform the comparison between the two market types.
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 provides a specific verb ('Side-by-side comparison') and clearly identifies the resource being compared ('simple vs negrisk market performance'), distinguishing it from sibling tools that analyze single markets or aggregates without the type-to-type comparison.
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?
While the description lists returned metrics, it offers no guidance on when to use this tool versus alternatives like 'get_market_analytics' or 'get_global_stats' that may overlap in functionality, nor does it mention prerequisites or filtering capabilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conditionsB
Get conditions (markets that have been prepared on-chain) with resolution status. Useful for finding resolved/unresolved markets.
| Name | Required | Description | Default |
|---|---|---|---|
| resolved | No | Filter by resolution status | |
| first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Adds valuable domain context ('on-chain', 'resolution status') but omits behavioral details like pagination behavior, data freshness, or return structure that agents need when annotations are absent.
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 efficient sentences with no wasted words. Front-loaded with action and resource. Briefness appropriate for simple list operation, though content could be redistributed to cover the missing parameter documentation.
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?
Adequate for a simple 2-parameter listing tool. Explains the domain-specific term 'conditions' effectively, but gaps remain around the undocumented 'first' parameter andcomparison to numerous sibling market tools.
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 only 50% (parameter 'first' undocumented). Description mentions 'resolution status' conceptually aligning with the 'resolved' parameter, but completely fails to document the 'first' parameter's purpose (likely pagination limit), providing no compensation for schema gaps.
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?
Clear verb ('Get') and resource ('conditions') with helpful parenthetical clarifying domain terminology ('markets that have been prepared on-chain'). However, lacks explicit differentiation from siblings like 'search_markets' or 'get_market_lifecycle'.
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?
States utility ('Useful for finding resolved/unresolved markets') implying when to use, but provides no explicit comparison to alternative tools or exclusion criteria (e.g., when to prefer search_markets instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_protocol_statsA
Get daily protocol stats (volume, trades, fees, splits, merges, redemptions) across both market types as a time series.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It successfully discloses the return format ('time series') and enumerates the specific data categories returned, which helps the agent understand output structure. However, it omits operational details like read-only status, rate limits, or caching behavior.
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?
Single, information-dense sentence. Every clause earns its place: the verb/resource ('Get daily protocol stats'), the metric enumeration in parentheses, the scope qualifier ('across both market types'), and the format ('as a time series'). Zero 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 has only one optional parameter with 100% schema coverage and no output schema, the description successfully compensates by detailing what metrics are returned. However, it could briefly clarify what 'protocol' means in this domain versus market-level data.
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% (the 'days' parameter is fully documented in the schema). The description mentions 'daily' which conceptually links to the 'days' parameter, but doesn't add explicit syntax guidance, validation limits, or usage examples beyond what the schema provides. Baseline 3 is appropriate for high-coverage schemas.
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 ('Get') and resource ('daily protocol stats') and clearly lists the returned metrics (volume, trades, fees, splits, merges, redemptions). It distinguishes from market-specific sibling tools by emphasizing 'protocol' level and 'across both market types,' though it doesn't explicitly name alternatives.
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 phrase 'across both market types' implicitly signals this aggregates data rather than querying individual markets (unlike get_market_daily_snapshots), but lacks explicit when-to-use guidance or prerequisites. The agent must infer this is for aggregated time-series analysis versus per-market inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_statsA
Get combined protocol-wide stats across both simple and negrisk markets. Returns total markets, trades, volume, users, splits, merges, redemptions with per-type breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden of disclosure. It compensates by enumerating the specific return fields (markets, trades, volume, users, splits, merges, redemptions) and hinting at structure ('per-type breakdown'). However, it omits operational details like caching behavior, rate limits, or real-time vs aggregated data lag.
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 efficiently structured sentences with zero redundancy. First sentence establishes scope and action; second sentence details the return payload. Every clause adds value beyond the structured fields.
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 absence of an output schema, the description adequately covers the return value complexity by listing the specific metrics returned (including domain-specific ones like splits/merges/redemptions). For a zero-parameter read operation, this is sufficient, though mentioning data freshness or pagination would strengthen it further.
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 zero parameters, establishing a baseline of 4 per evaluation rules. The description correctly omits parameter discussion since none exist, requiring no additional semantic clarification beyond the implicit 'no filters applied' nature of a global stats endpoint.
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 the specific action (Get combined protocol-wide stats), the resource (stats), and the scope (across both simple and negrisk markets). This successfully distinguishes it from siblings like get_market_analytics (per-market) and get_daily_protocol_stats (time-series) by emphasizing the global, combined aggregation.
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 scope mention ('across both simple and negrisk markets') implies this is for aggregate cross-type analysis rather than individual market queries, but there is no explicit when-to-use guidance or named alternatives. The agent must infer when to prefer this over more specific tools like compare_market_types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_liquidity_eventsB
Get splits, merges, and redemptions — the liquidity lifecycle events. Filter by market or user address.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | No | Filter by market conditionId | |
| address | No | Filter by user address | |
| first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It successfully defines the semantic meaning of 'liquidity events' (splits, merges, redemptions), but fails to disclose operational traits like read-only status, pagination behavior beyond the schema default, auth requirements, or rate limit implications.
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 efficient sentences with no redundancy. The first front-loads the core value (event types), while the second addresses filtering. Every word 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?
Given three simple parameters and no output schema, the description adequately covers the domain concept but lacks return value documentation. Since no output schema exists to clarify the structure of 'splits, merges, and redemptions' data, the description should ideally hint at the return format, which it does not.
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 67% (two of three parameters have descriptions). The description maps 'market' to conditionId and 'user address' to address, aligning with the schema's filter intent, but does not compensate for the undocumented 'first' parameter (which controls result limit/pagination).
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 specific verbs ('Get') and clearly identifies the resource as 'splits, merges, and redemptions — the liquidity lifecycle events.' It provides domain-specific terminology that distinguishes it from generic activity or trade tools, though it does not explicitly contrast with similar siblings like get_market_lifecycle.
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 mentions filtering capability ('Filter by market or user address') but provides no guidance on when to use this tool versus alternatives like get_market_trades or get_recent_activity, nor does it state prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_analyticsB
Get full analytics for a specific market by conditionId. Combines on-chain data (volume, trades, fees, resolution status) with market metadata (title, description, categories). Queries both subgraphs to find the market.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | The conditionId (hex) of the market |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description adds the behavioral detail that it 'Queries both subgraphs,' indicating data source complexity, but lacks other critical behavioral disclosures like error handling (what happens if conditionId invalid), 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?
Three sentences efficiently structured: purpose declaration, data scope enumeration, and implementation detail. All content earns its place without redundancy, though 'Queries both subgraphs' is implementation detail that could be optional.
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?
Compensates adequately for missing output schema by enumerating return fields (volume, trades, fees, resolution status, title, description, categories). Adequate for a single-parameter tool, though return structure/format remains unspecified.
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 conditionId well-documented in schema (type, hex format). Description references the parameter ('by conditionId') but adds no additional semantic detail beyond the schema description, warranting baseline score of 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?
States specific action (Get) and resource (full analytics for a specific market). Distinguishes from siblings by listing comprehensive data components (volume, trades, fees, resolution status, metadata) vs partial-data tools like get_market_trades.
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?
No explicit guidance on when to use this versus siblings (e.g., get_market_lifecycle, get_market_daily_snapshots). While it implies comprehensiveness by listing data components, it does not specify prerequisites or when to prefer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_daily_snapshotsB
Get daily volume, trades, and fees for a specific market over time.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | Market conditionId | |
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full disclosure burden. Mentions daily granularity and metric types (volume, trades, fees) which helps understand output shape. However, lacks critical operational details: pagination behavior, maximum days limit, error cases (invalid conditionId), or data freshness.
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?
Single 10-word sentence with action-oriented front-loading. Zero redundancy. Appropriate density for a focused data retrieval 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?
Adequate for a 2-parameter tool but leaves gaps given zero annotations and no output schema. Mentions what metrics are returned, which partially compensates for missing output schema, but omits temporal limits and response structure details expected for time-series data tools.
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 50% (conditionId described, days not). Description adds semantic context: 'daily' and 'over time' imply the days parameter controls time range, while 'specific market' clarifies conditionId. However, doesn't explicitly document that days specifies the lookback window or its default 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?
Specific verb 'Get' with clear resource (daily snapshots) and metrics (volume, trades, fees). Differentiates from siblings like get_daily_protocol_stats by specifying 'for a specific market' rather than global data.
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?
No explicit when-to-use guidance or alternatives mentioned. While 'specific market' implies usage context, it doesn't contrast with get_market_analytics or state prerequisites like needing a valid conditionId first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_lifecycleA
Get the complete lifecycle of a market: creation, trading stats, splits/merges, resolution status, and redemptions — all from on-chain data with metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | Market conditionId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context by specifying 'on-chain data with metadata' as the source, but lacks critical details about authentication requirements, rate limiting, pagination behavior, or the structure of returned lifecycle 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 description is a single, well-structured sentence that front-loads the core purpose ('Get the complete lifecycle'), enumerates specific components after the colon, and concludes with data source context. Zero wasted words; every clause 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?
Given the single parameter with full schema coverage and no output schema, the description adequately covers what the tool retrieves. It lists all major lifecycle components comprehensively. The only gap is the lack of return format details, though this is partially mitigated by the specificity of listed components.
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 100% schema description coverage, the baseline score is 3. The description appropriately does not redundantly document the conditionId parameter since the schema already defines it as 'Market conditionId'. No additional parameter semantics are provided in the description, but none are required given complete schema coverage.
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 excellently specifies the tool's scope with concrete lifecycle phases: creation, trading stats, splits/merges, resolution status, and redemptions. The verb 'Get' is precise, and the phrase 'complete lifecycle' distinguishes this from siblings that return partial data (e.g., get_market_trades, get_market_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?
While the description implies usage through 'complete lifecycle' (suggesting use this when needing full history versus partial data from siblings), it lacks explicit guidance on when to prefer this over alternatives like get_market_analytics or get_conditions. No explicit exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_positionsB
Get top position holders for a specific market. Shows who holds the biggest positions and their PnL.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | Market conditionId | |
| first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Indicates return data includes PnL and 'biggest' positions (implying size-sorted results), but lacks operational details like rate limits, data freshness, or pagination behavior.
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 efficient sentences with front-loaded action. Minor redundancy between 'top position holders' and 'who holds the biggest positions,' but overall 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?
Adequate for tool complexity (2 flat parameters, no output schema). Description compensates for missing output schema by disclosing return content (PnL, holder identities), fulfilling minimum requirements for invocation.
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 50% (conditionId described, first undocumented). Description maps 'specific market' to conditionId and implies 'first' controls the 'top' result count, but doesn't explicitly document the parameter format or default behavior.
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?
Clear verb (Get) and resource (market position holders). Specifies 'top' holders and 'PnL' data, distinguishing from sibling tools like get_trader_positions (trader-centric) and get_top_traders (trader rankings vs market 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?
No explicit guidance on when to use versus alternatives like get_trader_positions (user-specific) or get_market_analytics (aggregate data). No mention of prerequisites or filtering limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_tradesB
Get trades for a specific market. Returns trade details with maker/taker, price, volume, and fees from on-chain data.
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | Market conditionId | |
| first | No | Number of trades | |
| tradeType | No | Filter by trade type | |
| orderDirection | No | desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Provides useful context that data comes from 'on-chain' and lists specific return fields (maker/taker, price, volume, fees). However, with no annotations provided, the description carries full burden and omits operational details like data latency, pagination behavior beyond the 'first' parameter, or rate limiting.
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 efficient sentences with zero waste. Front-loaded action ('Get trades') followed by behavioral disclosure. Every word 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?
Adequate for a read-only query tool with moderate complexity, covering core purpose and data provenance. However, gaps remain: no usage differentiation from similar trade-fetching siblings, and the orderDirection parameter is undocumented in both schema and description.
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 75% (orderDirection lacks description). The description mentions 'specific market' which maps to conditionId, but adds minimal semantic detail beyond what the schema already provides for the documented parameters. Baseline score appropriate for high schema coverage.
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?
Clear verb-resource-scope: 'Get trades for a specific market.' The 'specific market' qualifier helps distinguish from sibling tools like get_trader_trades and get_recent_activity, though it doesn't explicitly contrast with them. The second sentence clarifies return payload contents.
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?
No explicit guidance on when to use this tool versus siblings like get_trader_trades (trades filtered by trader) or get_recent_activity (global activity feed). Missing prerequisites or conditions around the conditionId parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activityB
Get a unified feed of all recent on-chain activity: trades, splits, merges, and redemptions across both market types with market names.
| Name | Required | Description | Default |
|---|---|---|---|
| first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full disclosure burden. It successfully enumerates the specific activity types included (trades, splits, merges, redemptions) and mentions 'market names' are included. However, it fails to clarify what 'recent' means (time window), pagination behavior, or whether the feed is real-time vs cached.
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 a single dense sentence that efficiently conveys the tool's purpose and content types without redundancy. Every element serves to specify the scope or contents of the feed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description adequately covers what data is returned (activity types and market names) but omits operational context like pagination mechanics, time range constraints for 'recent', and response structure that would be necessary for complete tool selection confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'first' parameter, so the description must compensate. It fails to mention the 'first' parameter entirely, leaving undocumented what '30' represents (presumably result count/limit) and how pagination works.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get'), resource ('unified feed'), and specific scope ('trades, splits, merges, and redemptions across both market types'). The terms 'unified' and 'across both market types' implicitly distinguish it from sibling tools like get_market_trades or get_trader_trades which likely target specific entities, though explicit differentiation is absent.
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 usage through the word 'unified' (suggesting use when aggregating across markets), but provides no explicit when-to-use guidance or named alternatives. It doesn't clarify whether this should be preferred over get_liquidity_events or specific trade getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subgraph_schemaB
Get the GraphQL schema for a Limitless subgraph via introspection.
| Name | Required | Description | Default |
|---|---|---|---|
| subgraph | Yes | Which subgraph to introspect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. While mentioning 'introspection' correctly signals a read-only GraphQL operation, it omits critical behavioral details such as the return format (introspection JSON vs SDL), potential authentication requirements, or caching behaviors.
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 a single, efficient sentence (9 words) that leads with the action verb, wastes no words on tautology, and immediately conveys the tool's sole purpose without unnecessary preamble or 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 (1 parameter, 100% schema coverage) and lack of output schema, the description adequately covers the input contract and primary function. However, it could briefly note the expected response format (e.g., 'returns introspection schema JSON') to fully compensate for missing output documentation.
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 clear enum values ('simple', 'negrisk') documented in the input schema. The description aligns with the parameter name ('subgraph') but adds no additional semantic context about what distinguishes 'simple' from 'negrisk' subgraphs, warranting the baseline score for high-coverage schemas.
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 ('Get'), resource ('GraphQL schema'), scope ('Limitless subgraph'), and method ('via introspection'), clearly distinguishing it from sibling 'query_subgraph' which retrieves data rather than schema definitions. However, it assumes familiarity with 'Limitless' as a platform identifier without explicit domain context.
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 no guidance on when to use this tool versus alternatives, particularly failing to clarify when to call 'get_subgraph_schema' versus directly using 'query_subgraph', or that this is typically a prerequisite step for understanding available fields before querying.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_tradersB
Get top traders ranked by volume, trade count, or PnL. Queries both subgraphs and merges rankings.
| Name | Required | Description | Default |
|---|---|---|---|
| orderBy | No | totalVolumeUSD | |
| first | No | ||
| marketType | No | Filter by market type or combine both | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context about the implementation (queries both subgraphs and merges rankings), indicating it's an aggregated read-only operation. However, it lacks details on rate limits, pagination behavior, or what constitutes 'top' (ascending vs descending).
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 consists of two tightly constructed sentences with zero extraneous content. The first sentence establishes purpose and ranking dimensions; the second explains the data source pattern. Every word 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?
Given the low schema coverage, absence of annotations, and lack of output schema, the description provides the minimum viable context for a ranking tool. It adequately explains the core ranking logic but omits important details about the filtering capabilities (marketType) and result limiting (first).
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 only 33% (marketType described; orderBy and first are not). The description maps the orderBy options to human-readable concepts (volume, trade count, PnL), adding semantic value for that parameter. However, it fails to document the 'first' (limit) parameter or elaborate on 'marketType' beyond what's in 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 specific action (get) and resource (top traders) with ranking criteria (volume, trade count, PnL). However, it does not explicitly differentiate from sibling tools like get_trader_profile (individual lookup) vs. this aggregate ranking view.
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 no guidance on when to use this tool versus alternatives such as get_trader_profile for specific trader lookups or get_market_positions for position-specific analysis. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trader_positionsB
Get a trader's current positions across both market types with balances and PnL.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Trader wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions specific return data (balances, PnL) which helps, but omits details on data freshness, authentication requirements, or position status (open vs closed).
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?
Single efficient sentence (12 words) with no redundancy. Front-loaded with action ('Get...positions') and back-loaded with return details ('balances and PnL'). Slightly terse given lack of output schema.
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?
Appropriate for low complexity (1 param, flat schema). Compensates for missing output schema by specifying return contents (balances, PnL). Could clarify what 'both market types' refers to given sibling tools don't explicitly mention market types.
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 the 'address' parameter fully documented. Description implies the parameter identifies the trader ('trader's positions') but doesn't explicitly reference the wallet address requirement or validate the parameter semantics 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?
Clear verb+resource ('Get...positions') and specifies key return data ('balances and PnL'). Distinguishes from sibling get_market_positions by focusing on 'trader' scope and 'both market types', though 'Get' is slightly generic.
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?
No explicit when-to-use or alternative suggestions. However, 'across both market types' implicitly defines scope, distinguishing it from market-specific tools like get_market_positions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trader_profileA
Get a trader's profile across both simple and negrisk markets. Shows trade count, volume, fees, PnL, and first/last trade timestamps from on-chain data.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Trader wallet address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses data source ('on-chain data') and market coverage. However, lacks details on error handling (e.g., unknown address), caching behavior, or rate limits that would be expected for a data retrieval tool with no annotation safety hints.
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 well-structured sentences. Front-loaded with the action verb. First sentence establishes scope; second lists specific returned metrics. No redundant words or repetition of structured data elements.
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?
Compensates well for missing output schema by enumerating return fields (trade count, volume, fees, PnL, timestamps). Sufficient for a single-parameter lookup tool. Deducted one point for not describing error cases or empty result behavior.
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 the 'address' parameter already described as 'Trader wallet address'. The description aligns by referencing 'trader' and 'on-chain data' but adds no additional format constraints (e.g., checksum requirements) or usage guidance beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific action ('Get'), resource ('trader's profile'), and scope ('across both simple and negrisk markets'). Distinguishes from siblings like get_trader_trades and get_trader_positions by specifying aggregated output fields (trade count, volume, fees, PnL) rather than individual records.
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?
Implicitly guides via listed output fields (use when needing aggregated stats), but lacks explicit when/when-not guidance or named alternatives. Does not clarify when to prefer this over get_top_traders or get_trader_positions despite clear functional overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trader_tradesA
Get a trader's recent trades across both market types, enriched with market names.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Trader wallet address | |
| first | No | ||
| role | No | Filter by role in trade | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden. It successfully notes the 'enriched with market names' output characteristic and 'across both market types' scope, but fails to specify the time window for 'recent', pagination mechanics (cursor vs offset), or behavior when no trades exist.
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?
Single, well-structured sentence that front-loads the action ('Get a trader's recent trades') and layers scope and enrichment details without waste. Every clause 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?
Given moderate complexity (3 params, no output schema, no annotations), the description adequately covers the core retrieval purpose and output enrichment. However, gaps remain regarding temporal boundaries of 'recent' and the undocumented 'first' parameter's precise behavior.
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 67% (address and role described, first is not). The description adds value by implying 'first' controls the count of 'recent' results, suggesting chronological ordering. It also contextualizes 'role' as applying across 'both market types', adding semantic clarity beyond the raw 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 provides a specific verb ('Get'), resource ('trader's recent trades'), and scope ('across both market types'). The 'enriched with market names' detail adds specificity. However, it could better distinguish from sibling tool get_market_trades (market-centric vs trader-centric).
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?
While there are no explicit 'when to use' statements, the description implicitly guides selection by specifying 'trader's' (distinguishing from get_market_trades) and 'trades' (distinguishing from get_trader_positions). For explicit alternatives or prerequisites, the user must infer from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_subgraphB
Run a raw GraphQL query against a Limitless subgraph. Escape hatch for custom queries.
| Name | Required | Description | Default |
|---|---|---|---|
| subgraph | Yes | Which subgraph | |
| query | Yes | GraphQL query string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. While it identifies the operation as 'raw GraphQL', it fails to disclose if mutations are permitted, what return format to expect, rate limits, or authentication requirements for direct subgraph access.
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?
Extremely concise with two high-value sentences. Front-loaded with action verb ('Run'), zero redundancy, and the 'escape hatch' metaphor efficiently conveys usage intent without 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?
Adequate for a two-parameter tool with complete schema coverage, but misses opportunity to reference sibling 'get_subgraph_schema' for query construction or clarify output format given the 'raw' nature of the response.
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 100% schema description coverage, the baseline is 3. The description mentions 'GraphQL query' and 'subgraph', confirming the parameter purposes, but adds no additional semantic detail about query syntax, validation, or the enum values ('simple' vs 'negrisk').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific action ('Run a raw GraphQL query') and resource ('Limitless subgraph'). The term 'escape hatch' effectively distinguishes this from specific getter siblings by implying it's for custom/advanced use cases.
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?
'Escape hatch for custom queries' provides implied context for when to use this tool (non-standard queries), but lacks explicit guidance on when to prefer specific siblings like get_conditions or how to construct valid queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_marketsA
Search markets by keyword or category. Returns market metadata enriched with on-chain volume and trade counts from subgraphs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword to search in title/description | |
| categories | No | Filter by categories (e.g. ['Crypto', 'Politics']) | |
| first | No | Number of results to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Adds valuable behavioral context by disclosing data source ('from subgraphs') and return composition ('metadata enriched with on-chain volume and trade counts'). However, lacks operational details like rate limits, pagination cursors, or caching behavior that would be necessary for complete transparency without annotation support.
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 with zero waste. First sentence front-loads the action and scope; second sentence clarifies return value. Every word 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 3-parameter search tool with 100% schema coverage but no output schema, the description adequately compensates by describing return values ('market metadata enriched...'). Missing only pagination strategy details (cursor vs offset) which would be helpful given 'first' implies limit-based pagination.
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 schema fully documents all three parameters. Description mentions 'keyword or category' which maps to the parameter intent, but adds no syntax guidance, validation rules, or semantic relationships beyond what the schema properties already provide. Baseline 3 appropriate when schema does heavy lifting.
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?
Clear verb 'Search' and resource 'markets' with specific scope 'by keyword or category'. Distinguishes from siblings like get_market_analytics or get_market_trades by implying discovery/finding functionality rather than retrieval of specific known entities, though it doesn't explicitly contrast with them.
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?
Implies usage through 'Search markets by keyword or category' but provides no explicit when-to-use guidance versus alternatives like query_subgraph (raw graph access) or get_market_analytics (specific market data). No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose with no ambiguity. Tools are well-separated by scope (e.g., market-level, trader-level, protocol-wide, subgraph operations), and descriptions clearly differentiate them. For example, get_market_analytics provides comprehensive data for a single market, while get_global_stats offers aggregated protocol data, and there's no overlap in functionality.
Tool names follow a highly consistent verb_noun pattern throughout, using 'get_' for retrieval operations, 'compare_' for comparisons, 'search_' for searches, and 'query_' for raw queries. All names use snake_case uniformly, making them predictable and easy to understand, with no deviations in style or structure.
With 18 tools, the count is well-scoped for the server's purpose of providing analytics and data access for a prediction market protocol. Each tool earns its place by covering distinct aspects like market data, trader profiles, protocol stats, and subgraph operations, without feeling excessive or insufficient for the domain.
The tool surface offers complete coverage for the domain, including CRUD-like operations (e.g., get, search, query) across markets, traders, and protocol stats. It supports full lifecycle tracking (e.g., get_market_lifecycle, get_liquidity_events) and provides both aggregated and granular data, with no obvious gaps that would hinder agent 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
33 pay-per-call market and news data tools over MCP with free discovery and x402 payments.
The Graph MCP — indexed blockchain data via subgraph GraphQL queries
Real-time market events, sentiment, and technical analysis as MCP tools, backed by real data.
Crypto MCP with 21 tools for market data, DeFi, analytics, and sentiment. Post-paid USDC billing.
Related MCP Servers
- AlicenseBqualityBmaintenanceAn MCP server that enables querying Polymarket prediction market data through The Graph subgraphs. It provides tools for accessing market stats, trader P\&L, user positions, and orderbook activity using AI agents.351303MIT
- AlicenseAqualityDmaintenanceMCP server for querying AAVE V2/V3 lending protocol and governance data via The Graph subgraphs. Exposes 14 tools and 5 guided prompts that any AI agent (Claude, Cursor, Copilot, etc.) can use to query lending markets, user positions, health factors, liquidations, flash loans, rate history, and AAVE governance — across 7 chains (Ethereum, Base, Arbitrum, Polygon, Optimism, Avalanche, Fantom) via401072MIT
- AlicenseAqualityCmaintenanceMCP (Model Context Protocol) server that gives AI agents structured access to Predict.fun — a prediction market protocol on BNB Chain with $1.5B+ volume and yield-bearing mechanics via Venus Protocol. Indexes data from three subgraphs: orderbook activity, position lifecycle, and yield mechanics.15MIT
- AlicenseNot gradedqualityBmaintenanceWraps the Manifold Markets public REST API into an MCP server, providing 40 tools for querying markets, users, groups, bets, comments, and more.12MIT
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/PaulieB14/limitless-subgraphs'
If you have feedback or need assistance with the MCP directory API, please join our Discord server