Skip to main content
Glama
PaulieB14

Limitless MCP

by PaulieB14

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

limitless-simple-markets

Binary Yes/No markets — CTF Exchange v1/v2/v3

limitless-negrisk-markets

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

0xC9c98965297Bc527861c898329Ee280632B76e18

15,916,136

Exchange V1

0xa4409D988CA2218d956BeEFD3874100F444f0DC3

26,043,405

Exchange V2

0xF1De958F8641448A5ba78c01f434085385Af096D

39,507,768

Exchange V3

0x05c748E2f4DcDe0ec9Fa8DDc40DE6b867f923fa5

39,598,606

NegRisk Markets:

Contract

Address

Start Block

CTF

0xC9c98965297Bc527861c898329Ee280632B76e18

15,916,136

NegRisk Exchange V1

0x5a38afc17F7E97ad8d6C547ddb837E40B4aEDfC6

28,018,020

NegRisk Exchange V2

0x46e607D3f4a8494B0aB9b304d1463e2F4848891d

39,508,390

NegRisk Exchange V3

0xe3E00BA3a9888d1DE4834269f62ac008b4BB5C47

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

get_global_stats

Combined protocol stats across both market types

get_market_analytics

Full market detail — on-chain stats + metadata

search_markets

Keyword/category search with subgraph enrichment

get_market_trades

Trade feed for a specific market

get_market_daily_snapshots

Daily volume/trades/fees for a market

get_market_positions

Top position holders for a market

get_market_lifecycle

Creation → trading → resolution lifecycle

get_trader_profile

Trader stats merged across both subgraphs

get_top_traders

Leaderboard by volume, trades, or fees

get_trader_trades

Trader's recent trades with market names

get_trader_positions

Trader's portfolio with balances and PnL

get_daily_protocol_stats

Daily time series across both market types

compare_market_types

Simple vs NegRisk side-by-side comparison

get_liquidity_events

Splits, merges, and redemptions feed

get_recent_activity

Unified activity feed (trades + liquidity events)

get_conditions

Browse conditions with resolution status

get_subgraph_schema

GraphQL schema introspection

query_subgraph

Raw GraphQL escape hatch

Setup

cd mcp-server
npm install
npm run build

Claude 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/apikeys

  • LIMITLESS_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 via X-API-Key header. 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 tools
compare_market_typesB

Side-by-side comparison of simple vs negrisk market performance. Shows volume share, trade counts, fees, and activity breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolvedNoFilter by resolution status
firstNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days to return

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdNoFilter by market conditionId
addressNoFilter by user address
firstNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdYesThe conditionId (hex) of the market

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdYesMarket conditionId
daysNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdYesMarket conditionId

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdYesMarket conditionId
firstNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionIdYesMarket conditionId
firstNoNumber of trades
tradeTypeNoFilter by trade type
orderDirectionNodesc

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
firstNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
subgraphYesWhich subgraph to introspect

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderByNototalVolumeUSD
firstNo
marketTypeNoFilter by market type or combine bothall

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesTrader wallet address

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesTrader wallet address

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesTrader wallet address
firstNo
roleNoFilter by role in tradeboth

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
subgraphYesWhich subgraph
queryYesGraphQL query string

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoKeyword to search in title/description
categoriesNoFilter by categories (e.g. ['Crypto', 'Politics'])
firstNoNumber of results to return

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    An 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.
    35
    130
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP 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) via
    40
    107
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP (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.
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Wraps the Manifold Markets public REST API into an MCP server, providing 40 tools for querying markets, users, groups, bets, comments, and more.
    12
    MIT

Latest Blog Posts

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