Skip to main content
Glama
PaulieB14

Limitless MCP

get_market_lifecycle

Retrieve the complete lifecycle of a market, including creation, trading statistics, splits/merges, resolution status, and redemptions from on-chain data with metadata.

Instructions

Get the complete lifecycle of a market: creation, trading stats, splits/merges, resolution status, and redemptions — all from on-chain data with metadata.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
conditionIdYesMarket conditionId

Implementation Reference

  • The handler function for 'get_market_lifecycle' performs queries against both Simple and NegRisk markets, aggregates metadata, and returns a comprehensive market lifecycle object.
    async ({ conditionId }) => {
      try {
        const lifecycleQuery = (marketEntity: string) => `{
          ${marketEntity}(id: "${conditionId}") {
            id venue tradesCount buysCount sellsCount
            volumeUSD buyVolumeUSD sellVolumeUSD feesUSD createdAt createdTx
          }
          condition(id: "${conditionId}") {
            id oracle questionId outcomeSlotCount resolved
            payoutNumerators resolvedAt resolvedTx createdAt
          }
          splits(where: { conditionId: "${conditionId}" }, first: 100, orderBy: timestamp) {
            id stakeholder { id } amount amountUSD timestamp
          }
          merges(where: { conditionId: "${conditionId}" }, first: 100, orderBy: timestamp) {
            id stakeholder { id } amount amountUSD timestamp
          }
          redemptions(where: { conditionId: "${conditionId}" }, first: 100, orderBy: timestamp) {
            id redeemer { id } payout payoutUSD timestamp
          }
        }`;
    
        const [simpleData, negriskData, meta] = await Promise.all([
          querySimple(lifecycleQuery("market")).catch(() => ({})),
          queryNegRisk(lifecycleQuery("negRiskMarket")).catch(() => ({})),
          getMarketMeta(conditionId),
        ]);
    
        const market = (simpleData as any).market || (negriskData as any).negRiskMarket;
        const condition = (simpleData as any).condition || (negriskData as any).condition;
        const splits = [...((simpleData as any).splits || []), ...((negriskData as any).splits || [])];
        const merges = [...((simpleData as any).merges || []), ...((negriskData as any).merges || [])];
        const redemptions = [...((simpleData as any).redemptions || []), ...((negriskData as any).redemptions || [])];
    
        const totalSplitUSD = splits.reduce((a: number, s: any) => a + parseFloat(s.amountUSD || "0"), 0);
        const totalMergeUSD = merges.reduce((a: number, m: any) => a + parseFloat(m.amountUSD || "0"), 0);
        const totalRedemptionUSD = redemptions.reduce((a: number, r: any) => a + parseFloat(r.payoutUSD || "0"), 0);
    
        return textResult({
          title: meta?.title || "Unknown",
          description: meta?.description || "",
          categories: meta?.categories || [],
          expirationDate: meta?.expirationDate || "",
          currentPrices: meta?.prices || [],
          marketType: (simpleData as any).market ? "simple" : "negrisk",
          creation: {
            createdAt: market?.createdAt || condition?.createdAt,
            createdTx: market?.createdTx,
          },
          trading: market || null,
          condition: condition || null,
          liquidity: {
            splitsCount: splits.length,
            totalSplitUSD,
            mergesCount: merges.length,
            totalMergeUSD,
            redemptionsCount: redemptions.length,
            totalRedemptionUSD,
          },
          resolved: condition?.resolved || false,
          resolution: condition?.resolved
            ? {
                payoutNumerators: condition.payoutNumerators,
                resolvedAt: condition.resolvedAt,
                resolvedTx: condition.resolvedTx,
              }
            : null,
        });
      } catch (e) {
        return errorResult(e);
  • Registration of the 'get_market_lifecycle' tool including its description and input schema.
    server.registerTool(
      "get_market_lifecycle",
      {
        description:
          "Get the complete lifecycle of a market: creation, trading stats, splits/merges, resolution status, and redemptions — all from on-chain data with metadata.",
        inputSchema: {
          conditionId: z.string().describe("Market conditionId"),
        },
      },

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