@secondlayer/mcp 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -56,7 +56,7 @@ bunx -p @secondlayer/mcp secondlayer-mcp-http
56
56
 
57
57
  | Domain | Tools |
58
58
  | --- | --- |
59
- | **Index** (8) | `index_events`, `index_ft_transfers`, `index_nft_transfers`, `index_contract_calls`, `index_blocks`, `index_transactions`, `index_discover`, `batch_query` |
59
+ | **Index** (9) | `index_events`, `index_ft_transfers`, `index_nft_transfers`, `index_contract_calls`, `index_blocks`, `index_transactions`, `index_print_schema`, `index_discover`, `batch_query` |
60
60
  | **Subgraphs** (11) | `subgraphs_list`, `subgraphs_get`, `subgraphs_deploy`, `subgraphs_publish`, `subgraphs_unpublish`, `subgraphs_delete`, `subgraphs_query`, `subgraphs_backfill`, `subgraphs_reindex`, `subgraphs_stop`, `subgraphs_gaps` |
61
61
  | **Subscriptions** (7) | `subscriptions_create`, `subscriptions_list`, `subscriptions_get`, `subscriptions_update`, `subscriptions_delete`, `subscriptions_test`, `subscriptions_replay` |
62
62
  | **Streams** (1) | `streams_dumps` |
package/dist/bin-http.js CHANGED
@@ -201,7 +201,7 @@ var COLUMN_TYPES = [
201
201
  }
202
202
  ];
203
203
  var PRODUCT_BLURBS = {
204
- index: "decoded L2 events, transfers, contract calls, blocks, transactions",
204
+ index: "decoded events, transfers, contract calls, blocks, transactions",
205
205
  streams: "bulk parquet dumps of the raw chain event firehose",
206
206
  contracts: "trait-based contract discovery and ABIs",
207
207
  subgraphs: "author/deploy/query custom indexes",
@@ -392,7 +392,7 @@ var heightFilters = {
392
392
  limit: rangeFilters.limit
393
393
  };
394
394
  function registerIndexTools(server, clientProvider = getClient) {
395
- defineTool(server, "index_ft_transfers", "List decoded SIP-010 fungible-token transfers from the Index (L2 decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).", {
395
+ defineTool(server, "index_ft_transfers", "List decoded SIP-010 fungible-token transfers from the Index (decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).", {
396
396
  ...rangeFilters,
397
397
  sender: z3.string().optional().describe("Filter by sender principal"),
398
398
  recipient: z3.string().optional().describe("Filter by recipient principal")
@@ -423,6 +423,9 @@ function registerIndexTools(server, clientProvider = getClient) {
423
423
  type: z3.string().optional().describe("Filter by transaction type"),
424
424
  sender: z3.string().optional().describe("Filter by sender principal")
425
425
  }, async (params) => jsonResponse(await clientProvider().index.transactions.list(params)));
426
+ defineTool(server, "index_print_schema", "Empirical per-topic print payload schemas for a contract, inferred from sampled on-chain events: each topic's fields with observed Clarity types, decoded TS types, subgraph column types, and presence rates. Use before writing print_event subgraph handlers to learn what's on e.data. Anonymous read.", {
427
+ contractId: z3.string().describe("Contract id (SP….name) whose print events to profile")
428
+ }, async (params) => jsonResponse(await clientProvider().index.printSchema(params.contractId)));
426
429
  defineTool(server, "index_discover", "Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.", {}, async () => jsonResponse(await clientProvider().index.discover()));
427
430
  defineTool(server, "batch_query", "Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.", {
428
431
  requests: z3.array(z3.object({
@@ -842,5 +845,5 @@ httpServer.listen(port, () => {
842
845
  console.error("Warning: SECONDLAYER_MCP_SECRET not set, authentication disabled");
843
846
  });
844
847
 
845
- //# debugId=CB0901E85835C61764756E2164756E21
848
+ //# debugId=AB1366D442AFDAE964756E2164756E21
846
849
  //# sourceMappingURL=bin-http.js.map
@@ -4,19 +4,19 @@
4
4
  "sourcesContent": [
5
5
  "#!/usr/bin/env node\nimport {\n\ttype IncomingMessage,\n\ttype ServerResponse,\n\tcreateServer as createHttpServer,\n} from \"node:http\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { createServer } from \"./server.ts\";\n\nconst port = Number.parseInt(process.env.SECONDLAYER_MCP_PORT || \"3100\");\nconst secret = process.env.SECONDLAYER_MCP_SECRET;\nconst sessions = new Map<string, StreamableHTTPServerTransport>();\n\nfunction authenticate(req: IncomingMessage): boolean {\n\tif (!secret) return true;\n\treturn req.headers.authorization === `Bearer ${secret}`;\n}\n\nconst httpServer = createHttpServer(\n\tasync (req: IncomingMessage, res: ServerResponse) => {\n\t\t// Only handle /mcp endpoint\n\t\tconst url = new URL(req.url ?? \"/\", `http://localhost:${port}`);\n\t\tif (url.pathname !== \"/mcp\") {\n\t\t\tres.writeHead(404).end(JSON.stringify({ error: \"Not found\" }));\n\t\t\treturn;\n\t\t}\n\n\t\t// Auth check\n\t\tif (!authenticate(req)) {\n\t\t\tres.writeHead(401).end(JSON.stringify({ error: \"Unauthorized\" }));\n\t\t\treturn;\n\t\t}\n\n\t\tconst sessionId = req.headers[\"mcp-session-id\"] as string | undefined;\n\n\t\tif (req.method === \"POST\") {\n\t\t\t// Read body with 1MB limit\n\t\t\tconst MAX_BODY = 1_048_576;\n\t\t\tconst chunks: Buffer[] = [];\n\t\t\tlet totalSize = 0;\n\t\t\tfor await (const chunk of req) {\n\t\t\t\ttotalSize += (chunk as Buffer).length;\n\t\t\t\tif (totalSize > MAX_BODY) {\n\t\t\t\t\tres\n\t\t\t\t\t\t.writeHead(413)\n\t\t\t\t\t\t.end(JSON.stringify({ error: \"Request body too large\" }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchunks.push(chunk as Buffer);\n\t\t\t}\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\tlet body: any;\n\t\t\ttry {\n\t\t\t\tbody = JSON.parse(Buffer.concat(chunks).toString());\n\t\t\t} catch {\n\t\t\t\tres.writeHead(400).end(JSON.stringify({ error: \"Invalid JSON\" }));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check if this is an initialize request (new session)\n\t\t\tconst isInitialize = Array.isArray(body)\n\t\t\t\t? body.some((m: { method?: string }) => m.method === \"initialize\")\n\t\t\t\t: body.method === \"initialize\";\n\n\t\t\tif (isInitialize) {\n\t\t\t\t// Create new session\n\t\t\t\tconst transport = new StreamableHTTPServerTransport({\n\t\t\t\t\tsessionIdGenerator: () => crypto.randomUUID(),\n\t\t\t\t});\n\t\t\t\tconst server = createServer();\n\t\t\t\tawait server.connect(transport);\n\n\t\t\t\t// Store session after handling (sessionId is set after first request)\n\t\t\t\tawait transport.handleRequest(req, res, body);\n\n\t\t\t\tif (transport.sessionId) {\n\t\t\t\t\tsessions.set(transport.sessionId, transport);\n\t\t\t\t\ttransport.onclose = () => {\n\t\t\t\t\t\tif (transport.sessionId) sessions.delete(transport.sessionId);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Existing session\n\t\t\tif (!sessionId || !sessions.has(sessionId)) {\n\t\t\t\tres\n\t\t\t\t\t.writeHead(400)\n\t\t\t\t\t.end(JSON.stringify({ error: \"Invalid or missing session ID\" }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sessions.get(sessionId)?.handleRequest(req, res, body);\n\t\t} else if (req.method === \"GET\") {\n\t\t\t// SSE stream for existing session\n\t\t\tif (!sessionId || !sessions.has(sessionId)) {\n\t\t\t\tres\n\t\t\t\t\t.writeHead(400)\n\t\t\t\t\t.end(JSON.stringify({ error: \"Invalid or missing session ID\" }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sessions.get(sessionId)?.handleRequest(req, res);\n\t\t} else if (req.method === \"DELETE\") {\n\t\t\t// Session teardown\n\t\t\tif (sessionId && sessions.has(sessionId)) {\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\t\tconst transport = sessions.get(sessionId)!;\n\t\t\t\tawait transport.handleRequest(req, res);\n\t\t\t\tawait transport.close();\n\t\t\t\tsessions.delete(sessionId);\n\t\t\t} else {\n\t\t\t\tres\n\t\t\t\t\t.writeHead(400)\n\t\t\t\t\t.end(JSON.stringify({ error: \"Invalid or missing session ID\" }));\n\t\t\t}\n\t\t} else {\n\t\t\tres.writeHead(405).end(JSON.stringify({ error: \"Method not allowed\" }));\n\t\t}\n\t},\n);\n\nhttpServer.listen(port, () => {\n\tconsole.error(`SecondLayer MCP HTTP server listening on port ${port}`);\n\tif (!secret)\n\t\tconsole.error(\n\t\t\t\"Warning: SECONDLAYER_MCP_SECRET not set, authentication disabled\",\n\t\t);\n});\n",
6
6
  "import { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { registerResources } from \"./resources.ts\";\nimport { registerAccountTools } from \"./tools/account.ts\";\nimport { registerContractTools } from \"./tools/contracts.ts\";\nimport { registerIndexTools } from \"./tools/index.ts\";\nimport { registerScaffoldTools } from \"./tools/scaffold.ts\";\nimport { registerStreamsTools } from \"./tools/streams.ts\";\nimport { registerSubgraphTools } from \"./tools/subgraphs.ts\";\nimport { registerSubscriptionTools } from \"./tools/subscriptions.ts\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(\n\treadFileSync(join(__dirname, \"../package.json\"), \"utf-8\"),\n);\n\nexport function createServer(): McpServer {\n\tconst server = new McpServer({\n\t\tname: \"secondlayer\",\n\t\tversion: pkg.version,\n\t});\n\n\tregisterScaffoldTools(server);\n\tregisterSubgraphTools(server);\n\tregisterSubscriptionTools(server);\n\tregisterAccountTools(server);\n\tregisterIndexTools(server);\n\tregisterStreamsTools(server);\n\tregisterContractTools(server);\n\tregisterResources(server);\n\n\treturn server;\n}\n",
7
- "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { CHAIN_TRIGGER_FIELDS } from \"@secondlayer/shared\";\nimport { TRAIT_STANDARDS } from \"@secondlayer/stacks/clarity\";\nimport { TYPE_MAP } from \"@secondlayer/subgraphs/schema\";\nimport type { ColumnType } from \"@secondlayer/subgraphs/types\";\nimport { getClient } from \"./lib/client.ts\";\nimport { formatSubgraphSummary } from \"./lib/format.ts\";\nimport { getRegisteredToolNames } from \"./lib/tool.ts\";\n\n// SubgraphFilter vocabulary — the per-type fields an agent may set on a source\n// filter. Fields are hand-authored (the per-type breakdown lives only in the\n// SubgraphFilter interfaces), but the drift test in resources.test.ts locks the\n// type set to VALID_FILTER_TYPES and asserts every field is accepted by the\n// `.strict()` SubgraphFilterSchema, so this can never advertise a field the\n// validator rejects. `trait` (TraitScope) indexes all contracts of a standard\n// (e.g. all SIP-010 tokens). `prints` on print_event is type-level only (not a\n// runtime match field) and is intentionally omitted.\n// One-line human blurb per SIP trait standard, keyed by TRAIT_STANDARDS so a new\n// standard forces an entry here.\nconst TRAIT_BLURBS: Record<(typeof TRAIT_STANDARDS)[number], string> = {\n\t\"sip-009\": \"Non-fungible token (NFT) standard\",\n\t\"sip-010\": \"Fungible token standard\",\n\t\"sip-013\": \"Semi-fungible token standard\",\n};\n\nexport const FILTERS_REFERENCE = [\n\t{\n\t\ttype: \"stx_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"minAmount\", \"maxAmount\"],\n\t},\n\t{ type: \"stx_mint\", fields: [\"recipient\", \"minAmount\"] },\n\t{ type: \"stx_burn\", fields: [\"sender\", \"minAmount\"] },\n\t{ type: \"stx_lock\", fields: [\"lockedAddress\", \"minAmount\"] },\n\t{\n\t\ttype: \"ft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_mint\",\n\t\tfields: [\"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_burn\",\n\t\tfields: [\"sender\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"nft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"trait\"],\n\t},\n\t{ type: \"nft_mint\", fields: [\"recipient\", \"assetIdentifier\", \"trait\"] },\n\t{ type: \"nft_burn\", fields: [\"sender\", \"assetIdentifier\", \"trait\"] },\n\t{\n\t\ttype: \"contract_call\",\n\t\tfields: [\"contractId\", \"functionName\", \"caller\", \"trait\", \"abi\"],\n\t},\n\t{ type: \"contract_deploy\", fields: [\"deployer\", \"contractName\"] },\n\t{ type: \"print_event\", fields: [\"contractId\", \"topic\", \"trait\"] },\n];\n\n// Human blurb per column type, keyed by ColumnType so adding a type to the union\n// forces an entry here (the drift test in resources.test.ts asserts full coverage).\nconst COLUMN_TYPE_DESCRIPTIONS: Record<ColumnType, string> = {\n\ttext: \"UTF-8 string\",\n\tuint: \"Unsigned integer (Clarity uint) — NUMERIC for lossless 128-bit range\",\n\tint: \"Signed integer (Clarity int) — NUMERIC for lossless 128-bit range\",\n\tprincipal: \"Stacks address (standard or contract)\",\n\tboolean: \"Boolean value\",\n\ttimestamp: \"Timestamp with time zone\",\n\tjsonb: \"Arbitrary JSON data\",\n};\n\n// Derived from the subgraphs TYPE_MAP so the type→SQL mapping can't drift behind\n// the deployer (which is what actually creates the columns).\nexport const COLUMN_TYPES: Array<Record<string, unknown>> = [\n\t...(Object.keys(TYPE_MAP) as ColumnType[]).map((type) => ({\n\t\ttype,\n\t\tsqlType: TYPE_MAP[type],\n\t\tdescription: COLUMN_TYPE_DESCRIPTIONS[type],\n\t})),\n\t{\n\t\toptions: [\"nullable\", \"indexed\", \"search\"],\n\t\tdescription:\n\t\t\t\"Column options: nullable allows NULL, indexed creates a B-tree index, search enables full-text search\",\n\t},\n];\n\n// One-line human blurb per product surface; the tool list for each is\n// generated from the live tool registry (see buildCapabilities) so it can't\n// drift behind the actual surface.\nconst PRODUCT_BLURBS: Record<string, string> = {\n\tindex: \"decoded L2 events, transfers, contract calls, blocks, transactions\",\n\tstreams: \"bulk parquet dumps of the raw chain event firehose\",\n\tcontracts: \"trait-based contract discovery and ABIs\",\n\tsubgraphs: \"author/deploy/query custom indexes\",\n\tsubscriptions: \"webhook delivery on subgraph rows or raw chain events\",\n\taccount: \"identity and self-provisioned API keys\",\n\tscaffold: \"generate deploy-ready subgraph code from a deployed contract\",\n};\n\nconst PRODUCT_ORDER = [\n\t\"index\",\n\t\"streams\",\n\t\"contracts\",\n\t\"subgraphs\",\n\t\"subscriptions\",\n\t\"account\",\n\t\"scaffold\",\n];\n\n/**\n * \"What you can do\" overview, generated from the registered tool names so every\n * tool surfaces under its product without a hand-maintained list to fall stale.\n * Tools register (via defineTool) before registerResources runs, so the\n * registry is fully populated by the time a context read calls this.\n */\nexport function buildCapabilities() {\n\tconst byPrefix = new Map<string, string[]>();\n\tfor (const name of getRegisteredToolNames()) {\n\t\tconst prefix = name.slice(0, name.indexOf(\"_\"));\n\t\tconst tools = byPrefix.get(prefix) ?? [];\n\t\ttools.push(name);\n\t\tbyPrefix.set(prefix, tools);\n\t}\n\tconst order = [\n\t\t...PRODUCT_ORDER.filter((p) => byPrefix.has(p)),\n\t\t...[...byPrefix.keys()].filter((p) => !PRODUCT_ORDER.includes(p)),\n\t];\n\tconst products = order.map((p) => {\n\t\tconst tools = byPrefix.get(p) ?? [];\n\t\tconst blurb = PRODUCT_BLURBS[p];\n\t\treturn blurb\n\t\t\t? `${p} — ${blurb} (${tools.join(\", \")})`\n\t\t\t: `${p} (${tools.join(\", \")})`;\n\t});\n\treturn {\n\t\tproducts,\n\t\tdiscoverFirst:\n\t\t\t\"Call index_discover / contracts_find to learn what exists (and which filters each surface accepts) before querying.\",\n\t};\n}\n\n/** Pay-per-call rail — how an accountless agent buys reads past the limits. */\nconst X402_CAPABILITY = {\n\twhat: \"Index and Streams reads (/v1/index/*, /v1/streams/*) accept x402 v2 pay-per-call (network stacks:1, sponsored transfers — the payer holds sBTC/STX/USDCx, never gas). Index grants 1,000 free reads/day/IP before any 402; a paid Streams call opens a 500-call/1h PAYMENT-SESSION.\",\n\tpaidWrites:\n\t\t\"POST /v1/subgraphs (x402 $2) deploys a subgraph owned by the paying wallet — live from deploy, 7-day TTL, renewable via POST /v1/subgraphs/{name}/renew ($0.50/wk); claiming the account clears the expiry.\",\n\tprepaid:\n\t\t\"POST /v1/x402/deposit?usd=N loads a prepaid tab (PAYMENT-BALANCE token, $0.25 min) — calls debit it instantly, no per-call on-chain settle. GET /v1/x402/balance reads it.\",\n\tdiscovery:\n\t\t\"GET /v1/x402/supported on the API host for scheme, assets, prices, quotas, sessions, and prepaid metadata.\",\n\tautopay:\n\t\t\"Set X402_PRIVATE_KEY (a Stacks private key holding an accepted token) and this MCP server pays 402 challenges automatically (sessions replayed). Add X402_TOPUP_USD (and optionally X402_TOPUP_WHEN_BELOW) for an autonomous prepaid tab that refills itself. Receipts are logged per paid call.\",\n};\n\n/** Per-product read-auth tiers — what an agent must know before reading. */\nconst READ_AUTH_TIERS = {\n\tindex:\n\t\t\"anonymous reads allowed; free-tier API keys are rejected (Build+ required)\",\n\tstreams: \"API key required (SL_API_KEY) — keyless calls return 401\",\n\tsubgraphs:\n\t\t\"public subgraphs anon-readable at /v1/subgraphs/<name>/<table> ({ rows, next_cursor, tip } cursor envelope); private subgraphs need the owning account's API key (anon → 404); writes require an API key\",\n};\n\ntype ContextDeps = {\n\tclientProvider: typeof getClient;\n};\n\n/**\n * Assemble the live agent context read at connect: who you are, the live\n * Streams/Index tips, what you own (subgraphs/subscriptions), any in-flight\n * reindex operations, what the agent can do, and the read-auth tiers. The\n * snapshot comes from the SDK's `context()` (shared with non-MCP agents); each\n * field that couldn't be read becomes a sentinel string so the resource never\n * throws and always orients the agent.\n */\nexport async function buildContext(\n\tdeps: ContextDeps = { clientProvider: getClient },\n) {\n\tconst unavailable = \"unavailable: set SL_API_KEY\";\n\tconst orNull = <T>(v: T | null | undefined) => (v == null ? unavailable : v);\n\n\tconst snap = await deps\n\t\t.clientProvider()\n\t\t.context()\n\t\t.catch(() => null);\n\n\treturn {\n\t\tauthState: {\n\t\t\tapiKeySet: Boolean(process.env.SL_API_KEY),\n\t\t\tx402WalletSet: Boolean(process.env.X402_PRIVATE_KEY),\n\t\t},\n\t\twhatExists: {\n\t\t\taccount: orNull(snap?.account),\n\t\t\tstreamsTip: orNull(snap?.streamsTip),\n\t\t\tindexTip: orNull(snap?.indexTip),\n\t\t\tsubgraphs: snap?.subgraphs\n\t\t\t\t? snap.subgraphs.map(formatSubgraphSummary)\n\t\t\t\t: unavailable,\n\t\t\tsubscriptions: orNull(snap?.subscriptions),\n\t\t\tprojects: orNull(snap?.projects),\n\t\t\tapiKeys: orNull(snap?.apiKeys),\n\t\t\tactiveOperations: orNull(snap?.activeOperations),\n\t\t},\n\t\twhatYouCanDo: buildCapabilities(),\n\t\treadAuthTiers: READ_AUTH_TIERS,\n\t\tpayPerCall: X402_CAPABILITY,\n\t};\n}\n\nexport function registerResources(server: McpServer) {\n\tserver.resource(\n\t\t\"context\",\n\t\t\"secondlayer://context\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://context\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(await buildContext(), null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"filters\",\n\t\t\"secondlayer://filters\",\n\t\t{ description: \"Event filter types and their available fields\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://filters\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(FILTERS_REFERENCE, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"column-types\",\n\t\t\"secondlayer://column-types\",\n\t\t{ description: \"Subgraph column types, SQL mappings, and options\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://column-types\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(COLUMN_TYPES, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"traits\",\n\t\t\"secondlayer://traits\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"SIP trait standards the platform can classify and scaffold against — the valid values for contracts_find `trait` and subgraph scaffold `--trait`.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://traits\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttraits: TRAIT_STANDARDS.map((id) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdescription: TRAIT_BLURBS[id],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"chain-triggers\",\n\t\t\"secondlayer://chain-triggers\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers).\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://chain-triggers\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(CHAIN_TRIGGER_FIELDS, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n}\n",
7
+ "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { CHAIN_TRIGGER_FIELDS } from \"@secondlayer/shared\";\nimport { TRAIT_STANDARDS } from \"@secondlayer/stacks/clarity\";\nimport { TYPE_MAP } from \"@secondlayer/subgraphs/schema\";\nimport type { ColumnType } from \"@secondlayer/subgraphs/types\";\nimport { getClient } from \"./lib/client.ts\";\nimport { formatSubgraphSummary } from \"./lib/format.ts\";\nimport { getRegisteredToolNames } from \"./lib/tool.ts\";\n\n// SubgraphFilter vocabulary — the per-type fields an agent may set on a source\n// filter. Fields are hand-authored (the per-type breakdown lives only in the\n// SubgraphFilter interfaces), but the drift test in resources.test.ts locks the\n// type set to VALID_FILTER_TYPES and asserts every field is accepted by the\n// `.strict()` SubgraphFilterSchema, so this can never advertise a field the\n// validator rejects. `trait` (TraitScope) indexes all contracts of a standard\n// (e.g. all SIP-010 tokens). `prints` on print_event is type-level only (not a\n// runtime match field) and is intentionally omitted.\n// One-line human blurb per SIP trait standard, keyed by TRAIT_STANDARDS so a new\n// standard forces an entry here.\nconst TRAIT_BLURBS: Record<(typeof TRAIT_STANDARDS)[number], string> = {\n\t\"sip-009\": \"Non-fungible token (NFT) standard\",\n\t\"sip-010\": \"Fungible token standard\",\n\t\"sip-013\": \"Semi-fungible token standard\",\n};\n\nexport const FILTERS_REFERENCE = [\n\t{\n\t\ttype: \"stx_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"minAmount\", \"maxAmount\"],\n\t},\n\t{ type: \"stx_mint\", fields: [\"recipient\", \"minAmount\"] },\n\t{ type: \"stx_burn\", fields: [\"sender\", \"minAmount\"] },\n\t{ type: \"stx_lock\", fields: [\"lockedAddress\", \"minAmount\"] },\n\t{\n\t\ttype: \"ft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_mint\",\n\t\tfields: [\"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_burn\",\n\t\tfields: [\"sender\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"nft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"trait\"],\n\t},\n\t{ type: \"nft_mint\", fields: [\"recipient\", \"assetIdentifier\", \"trait\"] },\n\t{ type: \"nft_burn\", fields: [\"sender\", \"assetIdentifier\", \"trait\"] },\n\t{\n\t\ttype: \"contract_call\",\n\t\tfields: [\"contractId\", \"functionName\", \"caller\", \"trait\", \"abi\"],\n\t},\n\t{ type: \"contract_deploy\", fields: [\"deployer\", \"contractName\"] },\n\t{ type: \"print_event\", fields: [\"contractId\", \"topic\", \"trait\"] },\n];\n\n// Human blurb per column type, keyed by ColumnType so adding a type to the union\n// forces an entry here (the drift test in resources.test.ts asserts full coverage).\nconst COLUMN_TYPE_DESCRIPTIONS: Record<ColumnType, string> = {\n\ttext: \"UTF-8 string\",\n\tuint: \"Unsigned integer (Clarity uint) — NUMERIC for lossless 128-bit range\",\n\tint: \"Signed integer (Clarity int) — NUMERIC for lossless 128-bit range\",\n\tprincipal: \"Stacks address (standard or contract)\",\n\tboolean: \"Boolean value\",\n\ttimestamp: \"Timestamp with time zone\",\n\tjsonb: \"Arbitrary JSON data\",\n};\n\n// Derived from the subgraphs TYPE_MAP so the type→SQL mapping can't drift behind\n// the deployer (which is what actually creates the columns).\nexport const COLUMN_TYPES: Array<Record<string, unknown>> = [\n\t...(Object.keys(TYPE_MAP) as ColumnType[]).map((type) => ({\n\t\ttype,\n\t\tsqlType: TYPE_MAP[type],\n\t\tdescription: COLUMN_TYPE_DESCRIPTIONS[type],\n\t})),\n\t{\n\t\toptions: [\"nullable\", \"indexed\", \"search\"],\n\t\tdescription:\n\t\t\t\"Column options: nullable allows NULL, indexed creates a B-tree index, search enables full-text search\",\n\t},\n];\n\n// One-line human blurb per product surface; the tool list for each is\n// generated from the live tool registry (see buildCapabilities) so it can't\n// drift behind the actual surface.\nconst PRODUCT_BLURBS: Record<string, string> = {\n\tindex: \"decoded events, transfers, contract calls, blocks, transactions\",\n\tstreams: \"bulk parquet dumps of the raw chain event firehose\",\n\tcontracts: \"trait-based contract discovery and ABIs\",\n\tsubgraphs: \"author/deploy/query custom indexes\",\n\tsubscriptions: \"webhook delivery on subgraph rows or raw chain events\",\n\taccount: \"identity and self-provisioned API keys\",\n\tscaffold: \"generate deploy-ready subgraph code from a deployed contract\",\n};\n\nconst PRODUCT_ORDER = [\n\t\"index\",\n\t\"streams\",\n\t\"contracts\",\n\t\"subgraphs\",\n\t\"subscriptions\",\n\t\"account\",\n\t\"scaffold\",\n];\n\n/**\n * \"What you can do\" overview, generated from the registered tool names so every\n * tool surfaces under its product without a hand-maintained list to fall stale.\n * Tools register (via defineTool) before registerResources runs, so the\n * registry is fully populated by the time a context read calls this.\n */\nexport function buildCapabilities() {\n\tconst byPrefix = new Map<string, string[]>();\n\tfor (const name of getRegisteredToolNames()) {\n\t\tconst prefix = name.slice(0, name.indexOf(\"_\"));\n\t\tconst tools = byPrefix.get(prefix) ?? [];\n\t\ttools.push(name);\n\t\tbyPrefix.set(prefix, tools);\n\t}\n\tconst order = [\n\t\t...PRODUCT_ORDER.filter((p) => byPrefix.has(p)),\n\t\t...[...byPrefix.keys()].filter((p) => !PRODUCT_ORDER.includes(p)),\n\t];\n\tconst products = order.map((p) => {\n\t\tconst tools = byPrefix.get(p) ?? [];\n\t\tconst blurb = PRODUCT_BLURBS[p];\n\t\treturn blurb\n\t\t\t? `${p} — ${blurb} (${tools.join(\", \")})`\n\t\t\t: `${p} (${tools.join(\", \")})`;\n\t});\n\treturn {\n\t\tproducts,\n\t\tdiscoverFirst:\n\t\t\t\"Call index_discover / contracts_find to learn what exists (and which filters each surface accepts) before querying.\",\n\t};\n}\n\n/** Pay-per-call rail — how an accountless agent buys reads past the limits. */\nconst X402_CAPABILITY = {\n\twhat: \"Index and Streams reads (/v1/index/*, /v1/streams/*) accept x402 v2 pay-per-call (network stacks:1, sponsored transfers — the payer holds sBTC/STX/USDCx, never gas). Index grants 1,000 free reads/day/IP before any 402; a paid Streams call opens a 500-call/1h PAYMENT-SESSION.\",\n\tpaidWrites:\n\t\t\"POST /v1/subgraphs (x402 $2) deploys a subgraph owned by the paying wallet — live from deploy, 7-day TTL, renewable via POST /v1/subgraphs/{name}/renew ($0.50/wk); claiming the account clears the expiry.\",\n\tprepaid:\n\t\t\"POST /v1/x402/deposit?usd=N loads a prepaid tab (PAYMENT-BALANCE token, $0.25 min) — calls debit it instantly, no per-call on-chain settle. GET /v1/x402/balance reads it.\",\n\tdiscovery:\n\t\t\"GET /v1/x402/supported on the API host for scheme, assets, prices, quotas, sessions, and prepaid metadata.\",\n\tautopay:\n\t\t\"Set X402_PRIVATE_KEY (a Stacks private key holding an accepted token) and this MCP server pays 402 challenges automatically (sessions replayed). Add X402_TOPUP_USD (and optionally X402_TOPUP_WHEN_BELOW) for an autonomous prepaid tab that refills itself. Receipts are logged per paid call.\",\n};\n\n/** Per-product read-auth tiers — what an agent must know before reading. */\nconst READ_AUTH_TIERS = {\n\tindex:\n\t\t\"anonymous reads allowed; free-tier API keys are rejected (Build+ required)\",\n\tstreams: \"API key required (SL_API_KEY) — keyless calls return 401\",\n\tsubgraphs:\n\t\t\"public subgraphs anon-readable at /v1/subgraphs/<name>/<table> ({ rows, next_cursor, tip } cursor envelope); private subgraphs need the owning account's API key (anon → 404); writes require an API key\",\n};\n\ntype ContextDeps = {\n\tclientProvider: typeof getClient;\n};\n\n/**\n * Assemble the live agent context read at connect: who you are, the live\n * Streams/Index tips, what you own (subgraphs/subscriptions), any in-flight\n * reindex operations, what the agent can do, and the read-auth tiers. The\n * snapshot comes from the SDK's `context()` (shared with non-MCP agents); each\n * field that couldn't be read becomes a sentinel string so the resource never\n * throws and always orients the agent.\n */\nexport async function buildContext(\n\tdeps: ContextDeps = { clientProvider: getClient },\n) {\n\tconst unavailable = \"unavailable: set SL_API_KEY\";\n\tconst orNull = <T>(v: T | null | undefined) => (v == null ? unavailable : v);\n\n\tconst snap = await deps\n\t\t.clientProvider()\n\t\t.context()\n\t\t.catch(() => null);\n\n\treturn {\n\t\tauthState: {\n\t\t\tapiKeySet: Boolean(process.env.SL_API_KEY),\n\t\t\tx402WalletSet: Boolean(process.env.X402_PRIVATE_KEY),\n\t\t},\n\t\twhatExists: {\n\t\t\taccount: orNull(snap?.account),\n\t\t\tstreamsTip: orNull(snap?.streamsTip),\n\t\t\tindexTip: orNull(snap?.indexTip),\n\t\t\tsubgraphs: snap?.subgraphs\n\t\t\t\t? snap.subgraphs.map(formatSubgraphSummary)\n\t\t\t\t: unavailable,\n\t\t\tsubscriptions: orNull(snap?.subscriptions),\n\t\t\tprojects: orNull(snap?.projects),\n\t\t\tapiKeys: orNull(snap?.apiKeys),\n\t\t\tactiveOperations: orNull(snap?.activeOperations),\n\t\t},\n\t\twhatYouCanDo: buildCapabilities(),\n\t\treadAuthTiers: READ_AUTH_TIERS,\n\t\tpayPerCall: X402_CAPABILITY,\n\t};\n}\n\nexport function registerResources(server: McpServer) {\n\tserver.resource(\n\t\t\"context\",\n\t\t\"secondlayer://context\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://context\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(await buildContext(), null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"filters\",\n\t\t\"secondlayer://filters\",\n\t\t{ description: \"Event filter types and their available fields\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://filters\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(FILTERS_REFERENCE, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"column-types\",\n\t\t\"secondlayer://column-types\",\n\t\t{ description: \"Subgraph column types, SQL mappings, and options\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://column-types\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(COLUMN_TYPES, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"traits\",\n\t\t\"secondlayer://traits\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"SIP trait standards the platform can classify and scaffold against — the valid values for contracts_find `trait` and subgraph scaffold `--trait`.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://traits\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttraits: TRAIT_STANDARDS.map((id) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdescription: TRAIT_BLURBS[id],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"chain-triggers\",\n\t\t\"secondlayer://chain-triggers\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers).\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://chain-triggers\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(CHAIN_TRIGGER_FIELDS, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n}\n",
8
8
  "import { SecondLayer, readX402Receipt, withX402 } from \"@secondlayer/sdk\";\nimport { privateKeyToAccount } from \"@secondlayer/stacks/accounts\";\n\nlet instance: SecondLayer | null = null;\n\n/**\n * Read the API key from env. `SL_API_KEY` is the single credential var, matching\n * the CLI and SDK. (The former `SL_SERVICE_KEY` / `SECONDLAYER_API_KEY` aliases\n * were removed.)\n */\nfunction readApiKey(): string | undefined {\n\treturn process.env.SL_API_KEY;\n}\n\n/**\n * Lazy SDK singleton. Built keyless when no key is set so read tools (list,\n * get, query, spec) work during open beta — reads are public. Write tools\n * (deploy/reindex/delete) and account tools hit the API without a key and get\n * a 401, surfaced with a key hint via `keyHint` below.\n */\n/**\n * When `X402_PRIVATE_KEY` is set (a Stacks key holding an accepted token),\n * wrap fetch so 402 challenges on paid surfaces are paid automatically —\n * sponsored transfers, so the wallet never needs STX for gas. Each paid\n * call logs its settlement receipt to stderr (stdio-transport safe).\n */\nfunction buildFetchImpl(): typeof fetch | undefined {\n\tconst key = process.env.X402_PRIVATE_KEY;\n\tif (!key) return undefined;\n\tconst account = privateKeyToAccount(key);\n\t// Optional treasury policy: deposit X402_TOPUP_USD whenever the prepaid\n\t// tab drops below X402_TOPUP_WHEN_BELOW (defaults $0.50). Without it,\n\t// every paid call settles individually.\n\tconst topUpUsd = Number(process.env.X402_TOPUP_USD ?? \"\");\n\tconst paid = withX402(fetch, {\n\t\taccount,\n\t\t...(Number.isFinite(topUpUsd) && topUpUsd > 0\n\t\t\t? {\n\t\t\t\t\ttopUp: {\n\t\t\t\t\t\tusd: topUpUsd,\n\t\t\t\t\t\twhenBelow: Number(process.env.X402_TOPUP_WHEN_BELOW ?? \"0.5\"),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tconst wrapped = async (input: string | URL, init?: RequestInit) => {\n\t\tconst res = await paid(input, init);\n\t\tconst receipt = readX402Receipt(res);\n\t\tif (receipt) {\n\t\t\tconsole.error(\n\t\t\t\t`[x402] paid call settled tier=${receipt.state ?? \"confirmed\"} txid=${receipt.txid}`,\n\t\t\t);\n\t\t}\n\t\treturn res;\n\t};\n\t// SecondLayer only ever calls fetchImpl(url, init); Bun's `typeof fetch`\n\t// additionally carries `preconnect`, hence the cast.\n\treturn wrapped as unknown as typeof fetch;\n}\n\nexport function getClient(): SecondLayer {\n\tif (!instance) {\n\t\tconst apiKey = readApiKey();\n\t\tconst baseUrl = process.env.SECONDLAYER_API_URL;\n\t\tconst dumpsBaseUrl = process.env.SL_STREAMS_DUMPS_URL;\n\t\tconst fetchImpl = buildFetchImpl();\n\t\tinstance = new SecondLayer({\n\t\t\t...(apiKey ? { apiKey } : {}),\n\t\t\torigin: \"mcp\",\n\t\t\t...(baseUrl ? { baseUrl } : {}),\n\t\t\t...(dumpsBaseUrl ? { dumpsBaseUrl } : {}),\n\t\t\t...(fetchImpl ? { fetchImpl } : {}),\n\t\t});\n\t}\n\treturn instance;\n}\n\n// Appended to 401/403 errors raised on keyless requests — the operation needs\n// a write/account key, so point at where to get one.\nexport const keyHint =\n\t\" — set SL_API_KEY to an sk-sl_ API key from \" +\n\t\"https://secondlayer.tools/platform/api-keys for write and account operations\";\n\n/** Raw fetch helper for API endpoints not covered by the SDK. */\nexport async function apiRequest<T>(\n\tmethod: string,\n\tpath: string,\n\tbody?: unknown,\n): Promise<T> {\n\tconst apiKey = readApiKey();\n\tconst baseUrl =\n\t\tprocess.env.SECONDLAYER_API_URL || \"https://api.secondlayer.tools\";\n\tconst res = await fetch(`${baseUrl}${path}`, {\n\t\tmethod,\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t},\n\t\tbody: body ? JSON.stringify(body) : undefined,\n\t});\n\tif (!res.ok) {\n\t\tconst text = await res.text().catch(() => \"\");\n\t\tconst needsKey = !apiKey && (res.status === 401 || res.status === 403);\n\t\tthrow Object.assign(\n\t\t\tnew Error((text || `HTTP ${res.status}`) + (needsKey ? keyHint : \"\")),\n\t\t\t{ status: res.status },\n\t\t);\n\t}\n\tif (res.status === 204) return undefined as T;\n\treturn res.json() as Promise<T>;\n}\n",
9
9
  "/** Summarize a subgraph for list responses. */\nexport function formatSubgraphSummary(s: {\n\tname: string;\n\tstatus: string;\n\ttables: string[] | Record<string, unknown>;\n\tlastProcessedBlock: number;\n\tvisibility?: \"public\" | \"private\";\n}) {\n\tconst apiUrl =\n\t\tprocess.env.SECONDLAYER_API_URL || \"https://api.secondlayer.tools\";\n\treturn {\n\t\tname: s.name,\n\t\tstatus: s.status,\n\t\ttables: Array.isArray(s.tables) ? s.tables : Object.keys(s.tables),\n\t\tlastProcessedBlock: s.lastProcessedBlock,\n\t\t...(s.visibility ? { visibility: s.visibility } : {}),\n\t\t// Public subgraphs are anon-readable — surface the shareable /v1 URL.\n\t\t...(s.visibility === \"public\"\n\t\t\t? { publicUrl: `${apiUrl}/v1/subgraphs/${s.name}` }\n\t\t\t: {}),\n\t};\n}\n\n/** Cap array length and return truncation metadata. */\nexport function withCap<T>(\n\titems: T[],\n\tcap: number,\n): { items: T[]; truncated: boolean; total: number } {\n\treturn {\n\t\titems: items.slice(0, cap),\n\t\ttruncated: items.length > cap,\n\t\ttotal: items.length,\n\t};\n}\n\n/** Build MCP text response with JSON-serialized payload. */\nexport function jsonResponse(\n\tdata: unknown,\n\tisError?: boolean,\n): { content: Array<{ type: \"text\"; text: string }>; isError?: boolean } {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n\t\t...(isError && { isError: true }),\n\t};\n}\n\n/** Build MCP text response with plain text payload. */\nexport function textResponse(\n\ttext: string,\n\tisError?: boolean,\n): { content: Array<{ type: \"text\"; text: string }>; isError?: boolean } {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError && { isError: true }),\n\t};\n}\n",
10
10
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\ninterface ToolResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tisError?: boolean;\n}\n\n// Names of every tool registered via defineTool, in registration order. The\n// context resource generates its capability list from this so CAPABILITIES can\n// never drift behind the actual tool surface (a new tool auto-appears). A Set\n// dedupes across repeated createServer() calls in tests.\nconst registeredToolNames = new Set<string>();\n\n/** Tool names registered so far this process (see {@link defineTool}). */\nexport function getRegisteredToolNames(): string[] {\n\treturn [...registeredToolNames];\n}\n\n/**\n * Type-safe wrapper around McpServer.tool() that avoids TS2589.\n *\n * The MCP SDK's Zod-generic `tool()` signature recurses past TypeScript's\n * instantiation depth limit when schemas contain discriminated unions or\n * nested optionals. This helper isolates the boundary cast to one place\n * so tool files stay fully typed via the explicit `T` generic.\n *\n * Schema is typed as Record<string, unknown> to prevent TypeScript from\n * resolving the deeply recursive ZodRawShapeCompat constraint. Zod still\n * validates at runtime.\n */\nexport function defineTool<T>(\n\tserver: McpServer,\n\tname: string,\n\tdescription: string,\n\tschema: Record<string, unknown>,\n\thandler: (args: T) => Promise<ToolResult> | ToolResult,\n): void {\n\tconst wrappedHandler = async (args: T): Promise<ToolResult> => {\n\t\ttry {\n\t\t\treturn await handler(args);\n\t\t} catch (err: unknown) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tconst status =\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\t\terr instanceof Error && \"status\" in err ? (err as any).status : 0;\n\t\t\tconst type =\n\t\t\t\tstatus === 401\n\t\t\t\t\t? \"unauthorized\"\n\t\t\t\t\t: status === 404\n\t\t\t\t\t\t? \"not_found\"\n\t\t\t\t\t\t: status === 429\n\t\t\t\t\t\t\t? \"rate_limited\"\n\t\t\t\t\t\t\t: status >= 500\n\t\t\t\t\t\t\t\t? \"server_error\"\n\t\t\t\t\t\t\t\t: \"error\";\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify({ error: { type, status, message } }),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t}\n\t};\n\tregisteredToolNames.add(name);\n\t(server.tool as (...args: unknown[]) => unknown)(\n\t\tname,\n\t\tdescription,\n\t\tschema,\n\t\twrappedHandler,\n\t);\n}\n",
11
11
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod/v4\";\nimport { apiRequest, getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\nexport function registerAccountTools(server: McpServer) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"account_whoami\",\n\t\t\"Show the authenticated account's email and plan.\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst result = await apiRequest<{ email: string; plan: string }>(\n\t\t\t\t\"GET\",\n\t\t\t\t\"/api/accounts/me\",\n\t\t\t);\n\t\t\treturn jsonResponse(result);\n\t\t},\n\t);\n\n\tdefineTool<{ product?: \"streams\" | \"index\"; name?: string }>(\n\t\tserver,\n\t\t\"account_create_key\",\n\t\t\"Mint a scoped streams/index read API key so the agent can self-provision access. Requires an account-level (owner) API key. The returned `key` is shown ONCE — forward it to the user to set as SL_API_KEY.\",\n\t\t{\n\t\t\tproduct: z\n\t\t\t\t.enum([\"streams\", \"index\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Key scope (default streams)\"),\n\t\t\tname: z.string().optional().describe(\"Optional label for the key\"),\n\t\t},\n\t\tasync ({ product, name }) =>\n\t\t\tjsonResponse(await getClient().apiKeys.create({ product, name })),\n\t);\n}\n",
12
12
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nexport function registerContractTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\ttrait: string;\n\t\tconformance?: \"declared\" | \"inferred\" | \"any\";\n\t\tinclude?: \"abi\";\n\t\tlimit?: number;\n\t\tcursor?: string;\n\t}>(\n\t\tserver,\n\t\t\"contracts_find\",\n\t\t'Discover deployed Stacks contracts conforming to a trait (e.g. \"sip-010\", \"sip-009\", \"sip-013\"). The discovery endpoint for \"which contracts implement X\". Reads are public.',\n\t\t{\n\t\t\ttrait: z.string().describe('Required. Trait to match (e.g. \"sip-010\").'),\n\t\t\tconformance: z\n\t\t\t\t.enum([\"declared\", \"inferred\", \"any\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"declared = parsed from source, inferred = ABI shape-match, any = either (default)\",\n\t\t\t\t),\n\t\t\tinclude: z\n\t\t\t\t.literal(\"abi\")\n\t\t\t\t.optional()\n\t\t\t\t.describe('Set to \"abi\" to include each contract\\'s full ABI'),\n\t\t\tlimit: z.number().optional().describe(\"Page size, 1–500 (default 100)\"),\n\t\t\tcursor: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().contracts.list(params)),\n\t);\n\n\tdefineTool<{ contractId: string }>(\n\t\tserver,\n\t\t\"get_contract_abi\",\n\t\t\"Fetch a single deployed contract's ABI from the registry (prod-safe). Returns the contract's metadata + full ABI (functions, maps, variables, fungible/non-fungible tokens). Returns not_found if the contract isn't in the registry. Use it to inspect a contract before scaffold_from_contract.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"Fully qualified contract id (e.g. SP….amm-pool-v2-01)\"),\n\t\t},\n\t\tasync ({ contractId }) => {\n\t\t\tconst contract = await clientProvider().contracts.get(contractId, {\n\t\t\t\tincludeAbi: true,\n\t\t\t});\n\t\t\treturn contract\n\t\t\t\t? jsonResponse(contract)\n\t\t\t\t: jsonResponse(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\ttype: \"not_found\",\n\t\t\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\t\t\tmessage: `Contract not in registry: ${contractId}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t},\n\t);\n\n}\n",
13
- "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { DECODED_EVENT_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nconst INDEX_EVENT_TYPES = DECODED_EVENT_TYPES;\n\n/** Filters shared by the height/cursor-paginated Index endpoints. */\nconst rangeFilters = {\n\tcontractId: z.string().optional().describe(\"Filter by contract id\"),\n\tfromHeight: z.number().optional().describe(\"Start block height (inclusive)\"),\n\ttoHeight: z.number().optional().describe(\"End block height (inclusive)\"),\n\tcursor: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\tlimit: z.number().optional().describe(\"Max rows for this page\"),\n};\n\n/** Height-range subset for endpoints that don't filter by contract (blocks). */\nconst heightFilters = {\n\tfromHeight: rangeFilters.fromHeight,\n\ttoHeight: rangeFilters.toHeight,\n\tcursor: rangeFilters.cursor,\n\tlimit: rangeFilters.limit,\n};\n\nexport function registerIndexTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_ft_transfers\",\n\t\t\"List decoded SIP-010 fungible-token transfers from the Index (L2 decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.ftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_nft_transfers\",\n\t\t\"List decoded SIP-009 non-fungible-token transfers from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier (contract::asset)\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.nftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\teventType: (typeof INDEX_EVENT_TYPES)[number];\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_events\",\n\t\t\"List decoded chain events from the Index by event type. Use this for event types without a dedicated tool (stx_*, ft_mint/burn, nft_mint/burn, print), and for trait-scoped queries: set `trait` (e.g. sip-010) to match all contracts conforming to a standard — pair with contracts_find to discover traits. For ft/nft transfers without a trait prefer index_ft_transfers / index_nft_transfers.\",\n\t\t{\n\t\t\teventType: z\n\t\t\t\t.enum(INDEX_EVENT_TYPES)\n\t\t\t\t.describe(\"Required. Decoded event type to list.\"),\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier where applicable\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId; contract-keyed event types only.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.events.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tfunctionName?: string;\n\t\tsender?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_contract_calls\",\n\t\t\"List decoded contract calls from the Index (function name, args, result). Set `trait` (e.g. sip-010) to match calls to all contracts conforming to a standard. Note: contract-call cursors are a SEPARATE keyspace from event cursors — they are not interchangeable.\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tfunctionName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by called function name\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by caller principal\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.contractCalls.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_blocks\",\n\t\t\"List decoded blocks from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{ ...heightFilters },\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.blocks.list(params)),\n\t);\n\n\tdefineTool<{\n\t\ttype?: string;\n\t\tsender?: string;\n\t\tcontractId?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_transactions\",\n\t\t\"List decoded transactions from the Index. Filter by type, sender, or contract. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\ttype: z.string().optional().describe(\"Filter by transaction type\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.transactions.list(params)),\n\t);\n\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"index_discover\",\n\t\t\"Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().index.discover()),\n\t);\n\n\tdefineTool<{\n\t\trequests: Array<{ path: string; params?: Record<string, string> }>;\n\t}>(\n\t\tserver,\n\t\t\"batch_query\",\n\t\t\"Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.\",\n\t\t{\n\t\t\trequests: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tpath: z.string().describe(\"Public /v1 read path\"),\n\t\t\t\t\t\tparams: z.record(z.string(), z.string()).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.min(1)\n\t\t\t\t.max(10)\n\t\t\t\t.describe(\"Read descriptors, executed concurrently\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().batch(params.requests)),\n\t);\n}\n",
13
+ "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { DECODED_EVENT_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nconst INDEX_EVENT_TYPES = DECODED_EVENT_TYPES;\n\n/** Filters shared by the height/cursor-paginated Index endpoints. */\nconst rangeFilters = {\n\tcontractId: z.string().optional().describe(\"Filter by contract id\"),\n\tfromHeight: z.number().optional().describe(\"Start block height (inclusive)\"),\n\ttoHeight: z.number().optional().describe(\"End block height (inclusive)\"),\n\tcursor: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\tlimit: z.number().optional().describe(\"Max rows for this page\"),\n};\n\n/** Height-range subset for endpoints that don't filter by contract (blocks). */\nconst heightFilters = {\n\tfromHeight: rangeFilters.fromHeight,\n\ttoHeight: rangeFilters.toHeight,\n\tcursor: rangeFilters.cursor,\n\tlimit: rangeFilters.limit,\n};\n\nexport function registerIndexTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_ft_transfers\",\n\t\t\"List decoded SIP-010 fungible-token transfers from the Index (decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.ftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_nft_transfers\",\n\t\t\"List decoded SIP-009 non-fungible-token transfers from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier (contract::asset)\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.nftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\teventType: (typeof INDEX_EVENT_TYPES)[number];\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_events\",\n\t\t\"List decoded chain events from the Index by event type. Use this for event types without a dedicated tool (stx_*, ft_mint/burn, nft_mint/burn, print), and for trait-scoped queries: set `trait` (e.g. sip-010) to match all contracts conforming to a standard — pair with contracts_find to discover traits. For ft/nft transfers without a trait prefer index_ft_transfers / index_nft_transfers.\",\n\t\t{\n\t\t\teventType: z\n\t\t\t\t.enum(INDEX_EVENT_TYPES)\n\t\t\t\t.describe(\"Required. Decoded event type to list.\"),\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier where applicable\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId; contract-keyed event types only.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.events.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tfunctionName?: string;\n\t\tsender?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_contract_calls\",\n\t\t\"List decoded contract calls from the Index (function name, args, result). Set `trait` (e.g. sip-010) to match calls to all contracts conforming to a standard. Note: contract-call cursors are a SEPARATE keyspace from event cursors — they are not interchangeable.\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tfunctionName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by called function name\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by caller principal\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.contractCalls.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_blocks\",\n\t\t\"List decoded blocks from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{ ...heightFilters },\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.blocks.list(params)),\n\t);\n\n\tdefineTool<{\n\t\ttype?: string;\n\t\tsender?: string;\n\t\tcontractId?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_transactions\",\n\t\t\"List decoded transactions from the Index. Filter by type, sender, or contract. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\ttype: z.string().optional().describe(\"Filter by transaction type\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.transactions.list(params)),\n\t);\n\n\tdefineTool<{ contractId: string }>(\n\t\tserver,\n\t\t\"index_print_schema\",\n\t\t\"Empirical per-topic print payload schemas for a contract, inferred from sampled on-chain events: each topic's fields with observed Clarity types, decoded TS types, subgraph column types, and presence rates. Use before writing print_event subgraph handlers to learn what's on e.data. Anonymous read.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"Contract id (SP….name) whose print events to profile\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.printSchema(params.contractId)),\n\t);\n\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"index_discover\",\n\t\t\"Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().index.discover()),\n\t);\n\n\tdefineTool<{\n\t\trequests: Array<{ path: string; params?: Record<string, string> }>;\n\t}>(\n\t\tserver,\n\t\t\"batch_query\",\n\t\t\"Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.\",\n\t\t{\n\t\t\trequests: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tpath: z.string().describe(\"Public /v1 read path\"),\n\t\t\t\t\t\tparams: z.record(z.string(), z.string()).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.min(1)\n\t\t\t\t.max(10)\n\t\t\t\t.describe(\"Read descriptors, executed concurrently\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().batch(params.requests)),\n\t);\n}\n",
14
14
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { generateSubgraphCode } from \"@secondlayer/scaffold\";\nimport type { AbiFunction, AbiMap } from \"@secondlayer/scaffold\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\n// Source ABIs from the platform contract registry (prod-safe). The old\n// `/api/node/contracts/:id/abi` proxy is OSS/dedicated-only and 404s in prod.\nasync function fetchAbi(\n\tclientProvider: ClientProvider,\n\tcontractId: string,\n): Promise<{ functions: AbiFunction[]; maps: AbiMap[] }> {\n\tconst contract = await clientProvider().contracts.get(contractId, {\n\t\tincludeAbi: true,\n\t});\n\tif (!contract) throw new Error(`Contract not found: ${contractId}`);\n\tconst abi = contract.abi as {\n\t\tfunctions?: AbiFunction[];\n\t\tmaps?: AbiMap[];\n\t} | null;\n\tif (!abi) {\n\t\tthrow new Error(\n\t\t\t`No ABI available for ${contractId} (abi_status: ${contract.abi_status})`,\n\t\t);\n\t}\n\treturn { functions: abi.functions ?? [], maps: abi.maps ?? [] };\n}\n\nexport function registerScaffoldTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{ contractId: string; subgraphName?: string }>(\n\t\tserver,\n\t\t\"scaffold_from_contract\",\n\t\t\"Generate a subgraph scaffold from a deployed Stacks contract. Fetches the ABI automatically.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Fully qualified contract ID (e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01)\",\n\t\t\t\t),\n\t\t\tsubgraphName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Override the subgraph name (defaults to contract name)\"),\n\t\t},\n\t\tasync ({ contractId, subgraphName }) => {\n\t\t\tconst { functions, maps } = await fetchAbi(clientProvider, contractId);\n\t\t\tconst code = generateSubgraphCode(\n\t\t\t\tcontractId,\n\t\t\t\tfunctions,\n\t\t\t\tsubgraphName,\n\t\t\t\tmaps,\n\t\t\t);\n\t\t\treturn { content: [{ type: \"text\", text: code }] };\n\t\t},\n\t);\n}\n",
15
15
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nexport function registerStreamsTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"streams_dumps\",\n\t\t\"List the Streams bulk parquet dumps manifest — coverage range, latest_finalized_cursor, and per-file metadata (block range, row count, size, sha256, signed URL). This is the cold backfill path for downloading all raw data; fetch the file URLs directly (e.g. with DuckDB). Requires the dumps base URL to be configured (SL_STREAMS_DUMPS_URL). Live Streams reads (tip, events, consume) are REST-only: see /v1/streams/* in the OpenAPI spec.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().streams.dumps.list()),\n\t);\n}\n",
16
16
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { bundleSubgraphCode } from \"@secondlayer/bundler\";\nimport { ByoBreakingChangeError } from \"@secondlayer/sdk\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { formatSubgraphSummary, withCap } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype SubgraphClientProvider = typeof getClient;\n\nexport function registerSubgraphTools(\n\tserver: McpServer,\n\tclientProvider: SubgraphClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"subgraphs_list\",\n\t\t\"List all deployed subgraphs. Returns summary fields only, including visibility — public subgraphs are anon-readable at /v1/subgraphs/<name>.\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst { data } = await clientProvider().subgraphs.list();\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify(data.map(formatSubgraphSummary), null, 2),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_get\",\n\t\t\"Get full details of a subgraph including schema, health, and table columns.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst detail = await clientProvider().subgraphs.get(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(detail, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\ttable: string;\n\t\tfilters?: Record<string, string>;\n\t\tsort?: string;\n\t\torder?: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tfields?: string;\n\t\tcount?: boolean;\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_query\",\n\t\t'Query rows from a subgraph table (max 200 rows). Filters support operators: \"amount.gte\": \"1000\", \"sender.neq\": \"SP...\", \"name.like\": \"%token%\". Available operators: eq, neq, gt, gte, lt, lte, like. To TAIL new rows (no streaming over MCP): sort=_id, order=desc for the latest, then poll forward with the filter {\"_id.gt\": \"<last _id seen>\"}, order=asc. Fetch one row by id with {\"_id\": \"<id>\"}. Public subgraphs are also keyless over HTTP at GET /v1/subgraphs/<name>/<table> — { rows, next_cursor, tip } envelope, resume with ?cursor=<next_cursor> + _order=asc|desc (no _offset/_sort on /v1); hand that URL to third parties.',\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\ttable: z.string().describe(\"Table name\"),\n\t\t\tfilters: z\n\t\t\t\t.record(z.string(), z.string())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Column filters — plain values or with operators (e.g. {\"amount.gte\": \"1000\", \"sender\": \"SP...\"})',\n\t\t\t\t),\n\t\t\tsort: z.string().optional().describe(\"Column to sort by\"),\n\t\t\torder: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort order\"),\n\t\t\tlimit: z\n\t\t\t\t.number()\n\t\t\t\t.max(200)\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Max rows (default 50, max 200)\"),\n\t\t\toffset: z.number().optional().describe(\"Offset for pagination\"),\n\t\t\tfields: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Comma-separated column list to return (e.g. \"sender,amount\")',\n\t\t\t\t),\n\t\t\tcount: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"If true, return row count instead of rows\"),\n\t\t},\n\t\tasync ({\n\t\t\tname,\n\t\t\ttable,\n\t\t\tfilters,\n\t\t\tsort,\n\t\t\torder,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tfields,\n\t\t\tcount,\n\t\t}) => {\n\t\t\tif (count) {\n\t\t\t\tconst result = await clientProvider().subgraphs.queryTableCount(\n\t\t\t\t\tname,\n\t\t\t\t\ttable,\n\t\t\t\t\t{ filters, sort, order },\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rows = await clientProvider().subgraphs.queryTable(name, table, {\n\t\t\t\tfilters,\n\t\t\t\tsort,\n\t\t\t\torder,\n\t\t\t\tlimit: limit ?? 50,\n\t\t\t\toffset,\n\t\t\t\tfields,\n\t\t\t});\n\t\t\tconst cap = limit ?? 50;\n\t\t\tconst result = withCap(\n\t\t\t\trows as Record<string, unknown>[],\n\t\t\t\tcap > 200 ? 200 : cap,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string; fromBlock?: number; toBlock?: number }>(\n\t\tserver,\n\t\t\"subgraphs_reindex\",\n\t\t\"Reindex a subgraph from a specific block range. Returns an operationId — check subgraphs_get (health) or the REST operations endpoint to track progress to completion.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tfromBlock: z\n\t\t\t\t.number()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Start block (defaults to beginning)\"),\n\t\t\ttoBlock: z.number().optional().describe(\"End block (defaults to latest)\"),\n\t\t},\n\t\tasync ({ name, fromBlock, toBlock }) => {\n\t\t\tconst result = await clientProvider().subgraphs.reindex(name, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string; fromBlock: number; toBlock: number }>(\n\t\tserver,\n\t\t\"subgraphs_backfill\",\n\t\t\"Backfill a subgraph over a block range. Non-destructive forward fill (does not drop existing data) — unlike subgraphs_reindex, and the only data-fill path for BYO subgraphs (reindex is blocked there). Both blocks required. Returns an operationId — check subgraphs_get (health) or the REST operations endpoint to track progress.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tfromBlock: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.describe(\"Start block (inclusive)\"),\n\t\t\ttoBlock: z.number().int().nonnegative().describe(\"End block (inclusive)\"),\n\t\t},\n\t\tasync ({ name, fromBlock, toBlock }) => {\n\t\t\tconst result = await clientProvider().subgraphs.backfill(name, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_stop\",\n\t\t\"Cancel an in-flight reindex or backfill operation for a subgraph. Returns the stop request status; check subgraphs_get (health) or the REST operations endpoint to confirm it reaches a terminal state.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.stop(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tresolved?: boolean;\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_gaps\",\n\t\t\"List indexing gaps (missing block ranges) for a subgraph. Each gap reports start/end/size, reason, and detected/resolved timestamps. Feed an unresolved gap's range into subgraphs_backfill to fill it. Defaults to unresolved gaps.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tlimit: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.positive()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Max gaps to return\"),\n\t\t\toffset: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Pagination offset\"),\n\t\t\tresolved: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by resolved state (omit for unresolved only)\"),\n\t\t},\n\t\tasync ({ name, limit, offset, resolved }) => {\n\t\t\tconst result = await clientProvider().subgraphs.gaps(name, {\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\tresolved,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_delete\",\n\t\t\"Delete a subgraph permanently.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.delete(name);\n\t\t\treturn { content: [{ type: \"text\", text: result.message }] };\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tcode: string;\n\t\tstartBlock?: number;\n\t\tdatabaseUrl?: string;\n\t\tdryRun?: boolean;\n\t\tvisibility?: \"public\" | \"private\";\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_deploy\",\n\t\t\"Deploy a subgraph from TypeScript code. Pass the full defineSubgraph() source — it will be bundled, validated, and deployed. Optional startBlock overrides the source definition for this deploy. Set dryRun to validate and preview the schema/DDL without writing anything. Set databaseUrl to deploy to your own Postgres (BYO data plane) — the server verifies the connection first; with dryRun it returns the DDL + grant script. A breaking BYO schema change is refused and returns a migration plan (drop + rebuild DDL) instead of deploying. Visibility defaults: managed deploys are public (anon-readable at /v1/subgraphs/<name>, name claimed in the global public namespace), BYO deploys are private. Call `subgraphs_reindex` separately if you need a forced reindex.\",\n\t\t{\n\t\t\tcode: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"TypeScript source code containing a defineSubgraph() call\"),\n\t\t\tstartBlock: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Override the definition startBlock for this deploy\"),\n\t\t\tdatabaseUrl: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"BYO data plane: Postgres connection string to host the subgraph's schema and rows in your own database\",\n\t\t\t\t),\n\t\t\tdryRun: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Validate and preview the deploy (schema/DDL, BYO connection) without writing changes\",\n\t\t\t\t),\n\t\t\tvisibility: z\n\t\t\t\t.enum([\"public\", \"private\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Read visibility: public = anon /v1 reads + global name claim; private = owning account's key only. Defaults: managed → public, BYO → private.\",\n\t\t\t\t),\n\t\t},\n\t\tasync ({ code, startBlock, databaseUrl, dryRun, visibility }) => {\n\t\t\tconst bundled = await bundleSubgraphCode(code);\n\t\t\ttry {\n\t\t\t\tconst result = await clientProvider().subgraphs.deploy({\n\t\t\t\t\tname: bundled.name,\n\t\t\t\t\tversion: bundled.version,\n\t\t\t\t\tdescription: bundled.description,\n\t\t\t\t\tsources: bundled.sources,\n\t\t\t\t\tschema: bundled.schema,\n\t\t\t\t\thandlerCode: bundled.handlerCode,\n\t\t\t\t\tsourceCode: code,\n\t\t\t\t\t...(startBlock !== undefined ? { startBlock } : {}),\n\t\t\t\t\t...(databaseUrl !== undefined ? { databaseUrl } : {}),\n\t\t\t\t\t...(dryRun !== undefined ? { dryRun } : {}),\n\t\t\t\t\t...(visibility !== undefined ? { visibility } : {}),\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t\t};\n\t\t\t} catch (err) {\n\t\t\t\t// A refused BYO breaking change is an actionable result, not a failure:\n\t\t\t\t// defineTool would flatten the throw to {error:{message}} and drop the\n\t\t\t\t// migration plan, so surface reasons/diff/plan as a normal result.\n\t\t\t\tif (err instanceof ByoBreakingChangeError) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t\t\t{ byoBreakingChange: true, ...err.details },\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_publish\",\n\t\t\"Make a subgraph publicly readable at /v1/subgraphs/<name> — anyone (or any agent) can read it without a key. Claims the name in the global public namespace; fails with PUBLIC_NAME_TAKEN if another account holds it.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.publish(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_unpublish\",\n\t\t\"Make a subgraph private again — /v1 reads then require the owning account's bearer key, and the global public name claim is released.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.unpublish(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n}\n",
17
17
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type {\n\tChainTrigger,\n\tCreateSubscriptionRequest,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/sdk\";\nimport { CHAIN_TRIGGER_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype SubscriptionClientProvider = typeof getClient;\n\n/**\n * Subscription MCP tools — let agents list, configure, test, and replay\n * subgraph event subscriptions. Mirrors the HTTP API 1:1; structured\n * errors bubble through the SDK's ApiError.\n */\nexport function registerSubscriptionTools(\n\tserver: McpServer,\n\tclientProvider: SubscriptionClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"subscriptions_list\",\n\t\t\"List all subscriptions for the current account. Returns summary fields (no secrets).\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst { data } = await clientProvider().subscriptions.list();\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_get\",\n\t\t\"Get full detail for a subscription (filter, auth, retry config, circuit state).\",\n\t\t{ id: z.string().describe(\"Subscription id\") },\n\t\tasync ({ id }) => {\n\t\t\tconst detail = await clientProvider().subscriptions.get(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(detail, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\tsubgraphName?: string;\n\t\ttableName?: string;\n\t\ttriggers?: ChainTrigger[];\n\t\turl: string;\n\t\tformat?:\n\t\t\t| \"standard-webhooks\"\n\t\t\t| \"inngest\"\n\t\t\t| \"trigger\"\n\t\t\t| \"cloudflare\"\n\t\t\t| \"cloudevents\"\n\t\t\t| \"raw\";\n\t\truntime?: \"inngest\" | \"trigger\" | \"cloudflare\" | \"node\";\n\t\tfilter?: Record<string, unknown>;\n\t\tauthConfig?: Record<string, unknown>;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_create\",\n\t\t\"Create a subscription. Two kinds (mutually exclusive): a SUBGRAPH subscription fires on a subgraph table's rows (set subgraphName + tableName + optional filter); a CHAIN subscription fires on raw chain events with no subgraph (set triggers). Returns `signingSecret` ONCE — forward it to the user so they can wire it into their receiver.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Human-readable name, unique per account\"),\n\t\t\tsubgraphName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Subgraph to subscribe to (subgraph subscription)\"),\n\t\t\ttableName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Table within the subgraph (subgraph subscription)\"),\n\t\t\ttriggers: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\ttype: z.enum(CHAIN_TRIGGER_TYPES),\n\t\t\t\t\t\tcontractId: z.string().optional(),\n\t\t\t\t\t\tfunctionName: z.string().optional(),\n\t\t\t\t\t\tcaller: z.string().optional(),\n\t\t\t\t\t\tsender: z.string().optional(),\n\t\t\t\t\t\trecipient: z.string().optional(),\n\t\t\t\t\t\tassetIdentifier: z.string().optional(),\n\t\t\t\t\t\tdeployer: z.string().optional(),\n\t\t\t\t\t\tcontractName: z.string().optional(),\n\t\t\t\t\t\ttopic: z.string().optional(),\n\t\t\t\t\t\tlockedAddress: z.string().optional(),\n\t\t\t\t\t\ttrait: z.string().optional(),\n\t\t\t\t\t\tminAmount: z.union([z.string(), z.number()]).optional(),\n\t\t\t\t\t\tmaxAmount: z.union([z.string(), z.number()]).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Chain triggers (chain subscription) — provide INSTEAD of subgraphName/tableName. Each targets a raw chain event/tx; string fields accept `*` wildcards, `trait` scopes to a SIP/trait. Per-type accepted fields: see the secondlayer://chain-triggers resource. Forward-looking: starts at chain tip, no backfill.\",\n\t\t\t\t),\n\t\t\turl: z.string().describe(\"Webhook URL\"),\n\t\t\tformat: z\n\t\t\t\t.enum([\n\t\t\t\t\t\"standard-webhooks\",\n\t\t\t\t\t\"inngest\",\n\t\t\t\t\t\"trigger\",\n\t\t\t\t\t\"cloudflare\",\n\t\t\t\t\t\"cloudevents\",\n\t\t\t\t\t\"raw\",\n\t\t\t\t])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Wire format (default standard-webhooks)\"),\n\t\t\truntime: z\n\t\t\t\t.enum([\"inngest\", \"trigger\", \"cloudflare\", \"node\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Receiver runtime label (display only)\"),\n\t\t\tfilter: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Scalar filter DSL, e.g. {\"amount\": {\"gte\": 100}, \"sender\": \"SP...\"}',\n\t\t\t\t),\n\t\t\tauthConfig: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Receiver auth sent with each delivery, e.g. {\"type\": \"bearer\", \"token\": \"...\"}',\n\t\t\t\t),\n\t\t},\n\t\tasync (input) => {\n\t\t\tconst res = await clientProvider().subscriptions.create(\n\t\t\t\tinput as CreateSubscriptionRequest,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tid: string;\n\t\tname?: string;\n\t\turl?: string;\n\t\tfilter?: Record<string, unknown>;\n\t\tauthConfig?: Record<string, unknown>;\n\t\tformat?:\n\t\t\t| \"standard-webhooks\"\n\t\t\t| \"inngest\"\n\t\t\t| \"trigger\"\n\t\t\t| \"cloudflare\"\n\t\t\t| \"cloudevents\"\n\t\t\t| \"raw\";\n\t\truntime?: \"inngest\" | \"trigger\" | \"cloudflare\" | \"node\" | null;\n\t\tmaxRetries?: number;\n\t\ttimeoutMs?: number;\n\t\tconcurrency?: number;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_update\",\n\t\t\"Patch a subscription (name, url, filter, authConfig, format, runtime, retry, timeout, concurrency).\",\n\t\t{\n\t\t\tid: z.string(),\n\t\t\tname: z.string().optional().describe(\"Rename the subscription\"),\n\t\t\turl: z.string().optional(),\n\t\t\tfilter: z.record(z.string(), z.unknown()).optional(),\n\t\t\tauthConfig: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Receiver auth sent with each delivery (bearer/etc.)\"),\n\t\t\tformat: z\n\t\t\t\t.enum([\n\t\t\t\t\t\"standard-webhooks\",\n\t\t\t\t\t\"inngest\",\n\t\t\t\t\t\"trigger\",\n\t\t\t\t\t\"cloudflare\",\n\t\t\t\t\t\"cloudevents\",\n\t\t\t\t\t\"raw\",\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\truntime: z\n\t\t\t\t.enum([\"inngest\", \"trigger\", \"cloudflare\", \"node\"])\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t\tmaxRetries: z.number().int().min(0).optional(),\n\t\t\ttimeoutMs: z.number().int().min(100).optional(),\n\t\t\tconcurrency: z.number().int().min(1).optional(),\n\t\t},\n\t\tasync ({ id, ...patch }) => {\n\t\t\tconst res = await clientProvider().subscriptions.update(\n\t\t\t\tid,\n\t\t\t\tpatch as UpdateSubscriptionRequest,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_delete\",\n\t\t\"Delete a subscription. Pending outbox rows are cascade-deleted.\",\n\t\t{ id: z.string() },\n\t\tasync ({ id }) => {\n\t\t\tconst res = await clientProvider().subscriptions.delete(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_test\",\n\t\t\"Send a one-off test webhook to a subscription's URL (built for its format, SSRF-guarded). Logged as a delivery row. Returns {ok, statusCode, error, durationMs, deliveryId}.\",\n\t\t{ id: z.string().describe(\"Subscription id\") },\n\t\tasync ({ id }) => {\n\t\t\tconst res = await clientProvider().subscriptions.test(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tid: string;\n\t\tfromBlock: number;\n\t\ttoBlock: number;\n\t\tforce?: string;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_replay\",\n\t\t\"Replay a block range for a subscription. Replays run at 10% of batch capacity — use sparingly. Pass `force` (a short idempotency suffix) to re-run a range that was already replayed.\",\n\t\t{\n\t\t\tid: z.string(),\n\t\t\tfromBlock: z.number().int().nonnegative(),\n\t\t\ttoBlock: z.number().int().nonnegative(),\n\t\t\tforce: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Idempotency suffix to force a duplicate replay of the range\",\n\t\t\t\t),\n\t\t},\n\t\tasync ({ id, fromBlock, toBlock, force }) => {\n\t\t\tconst res = await clientProvider().subscriptions.replay(id, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t\t...(force !== undefined ? { force } : {}),\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n}\n"
18
18
  ],
19
- "mappings": ";;;AACA;AAAA,kBAGC;AAAA;AAED;;;ACNA;AACA;AACA;AACA;;;ACFA;AACA;AACA;;;ACHA;AACA;AAEA,IAAI,WAA+B;AAOnC,SAAS,UAAU,GAAuB;AAAA,EACzC,OAAO,QAAQ,IAAI;AAAA;AAepB,SAAS,cAAc,GAA6B;AAAA,EACnD,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,IAAI,CAAC;AAAA,IAAK;AAAA,EACV,MAAM,UAAU,oBAAoB,GAAG;AAAA,EAIvC,MAAM,WAAW,OAAO,QAAQ,IAAI,kBAAkB,EAAE;AAAA,EACxD,MAAM,OAAO,SAAS,OAAO;AAAA,IAC5B;AAAA,OACI,OAAO,SAAS,QAAQ,KAAK,WAAW,IACzC;AAAA,MACA,OAAO;AAAA,QACN,KAAK;AAAA,QACL,WAAW,OAAO,QAAQ,IAAI,yBAAyB,KAAK;AAAA,MAC7D;AAAA,IACD,IACC,CAAC;AAAA,EACL,CAAC;AAAA,EACD,MAAM,UAAU,OAAO,OAAqB,SAAuB;AAAA,IAClE,MAAM,MAAM,MAAM,KAAK,OAAO,IAAI;AAAA,IAClC,MAAM,UAAU,gBAAgB,GAAG;AAAA,IACnC,IAAI,SAAS;AAAA,MACZ,QAAQ,MACP,iCAAiC,QAAQ,SAAS,oBAAoB,QAAQ,MAC/E;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAIR,OAAO;AAAA;AAGD,SAAS,SAAS,GAAgB;AAAA,EACxC,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,SAAS,WAAW;AAAA,IAC1B,MAAM,UAAU,QAAQ,IAAI;AAAA,IAC5B,MAAM,eAAe,QAAQ,IAAI;AAAA,IACjC,MAAM,YAAY,eAAe;AAAA,IACjC,WAAW,IAAI,YAAY;AAAA,SACtB,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3B,QAAQ;AAAA,SACJ,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,SACzB,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,SACnC,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IAClC,CAAC;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAKD,IAAM,UACZ,iDACA;AAGD,eAAsB,UAAa,CAClC,QACA,MACA,MACa;AAAA,EACb,MAAM,SAAS,WAAW;AAAA,EAC1B,MAAM,UACL,QAAQ,IAAI,uBAAuB;AAAA,EACpC,MAAM,MAAM,MAAM,MAAM,GAAG,UAAU,QAAQ;AAAA,IAC5C;AAAA,IACA,SAAS;AAAA,MACR,gBAAgB;AAAA,SACZ,SAAS,EAAE,eAAe,UAAU,SAAS,IAAI,CAAC;AAAA,IACvD;AAAA,IACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,EACrC,CAAC;AAAA,EACD,IAAI,CAAC,IAAI,IAAI;AAAA,IACZ,MAAM,OAAO,MAAM,IAAI,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IAC5C,MAAM,WAAW,CAAC,WAAW,IAAI,WAAW,OAAO,IAAI,WAAW;AAAA,IAClE,MAAM,OAAO,OACZ,IAAI,OAAO,QAAQ,QAAQ,IAAI,aAAa,WAAW,UAAU,GAAG,GACpE,EAAE,QAAQ,IAAI,OAAO,CACtB;AAAA,EACD;AAAA,EACA,IAAI,IAAI,WAAW;AAAA,IAAK;AAAA,EACxB,OAAO,IAAI,KAAK;AAAA;;;AC5GV,SAAS,qBAAqB,CAAC,GAMnC;AAAA,EACF,MAAM,SACL,QAAQ,IAAI,uBAAuB;AAAA,EACpC,OAAO;AAAA,IACN,MAAM,EAAE;AAAA,IACR,QAAQ,EAAE;AAAA,IACV,QAAQ,MAAM,QAAQ,EAAE,MAAM,IAAI,EAAE,SAAS,OAAO,KAAK,EAAE,MAAM;AAAA,IACjE,oBAAoB,EAAE;AAAA,OAClB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,OAE/C,EAAE,eAAe,WAClB,EAAE,WAAW,GAAG,uBAAuB,EAAE,OAAO,IAChD,CAAC;AAAA,EACL;AAAA;AAIM,SAAS,OAAU,CACzB,OACA,KACoD;AAAA,EACpD,OAAO;AAAA,IACN,OAAO,MAAM,MAAM,GAAG,GAAG;AAAA,IACzB,WAAW,MAAM,SAAS;AAAA,IAC1B,OAAO,MAAM;AAAA,EACd;AAAA;AAIM,SAAS,YAAY,CAC3B,MACA,SACwE;AAAA,EACxE,OAAO;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,CAAC;AAAA,OAC3D,WAAW,EAAE,SAAS,KAAK;AAAA,EAChC;AAAA;;;AChCD,IAAM,sBAAsB,IAAI;AAGzB,SAAS,sBAAsB,GAAa;AAAA,EAClD,OAAO,CAAC,GAAG,mBAAmB;AAAA;AAexB,SAAS,UAAa,CAC5B,QACA,MACA,aACA,QACA,SACO;AAAA,EACP,MAAM,iBAAiB,OAAO,SAAiC;AAAA,IAC9D,IAAI;AAAA,MACH,OAAO,MAAM,QAAQ,IAAI;AAAA,MACxB,OAAO,KAAc;AAAA,MACtB,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC/D,MAAM,SAEL,eAAe,SAAS,YAAY,MAAO,IAAY,SAAS;AAAA,MACjE,MAAM,OACL,WAAW,MACR,iBACA,WAAW,MACV,cACA,WAAW,MACV,iBACA,UAAU,MACT,iBACA;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,UACR;AAAA,YACC,MAAM;AAAA,YACN,MAAM,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,QAAQ,QAAQ,EAAE,CAAC;AAAA,UAC1D;AAAA,QACD;AAAA,QACA,SAAS;AAAA,MACV;AAAA;AAAA;AAAA,EAGF,oBAAoB,IAAI,IAAI;AAAA,EAC3B,OAAO,KACP,MACA,aACA,QACA,cACD;AAAA;;;AHrDD,IAAM,eAAiE;AAAA,EACtE,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACZ;AAEO,IAAM,oBAAoB;AAAA,EAChC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,aAAa,aAAa,WAAW;AAAA,EACzD;AAAA,EACA,EAAE,MAAM,YAAY,QAAQ,CAAC,aAAa,WAAW,EAAE;AAAA,EACvD,EAAE,MAAM,YAAY,QAAQ,CAAC,UAAU,WAAW,EAAE;AAAA,EACpD,EAAE,MAAM,YAAY,QAAQ,CAAC,iBAAiB,WAAW,EAAE;AAAA,EAC3D;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,aAAa,mBAAmB,aAAa,OAAO;AAAA,EACxE;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,aAAa,mBAAmB,aAAa,OAAO;AAAA,EAC9D;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,mBAAmB,aAAa,OAAO;AAAA,EAC3D;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,aAAa,mBAAmB,OAAO;AAAA,EAC3D;AAAA,EACA,EAAE,MAAM,YAAY,QAAQ,CAAC,aAAa,mBAAmB,OAAO,EAAE;AAAA,EACtE,EAAE,MAAM,YAAY,QAAQ,CAAC,UAAU,mBAAmB,OAAO,EAAE;AAAA,EACnE;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,cAAc,gBAAgB,UAAU,SAAS,KAAK;AAAA,EAChE;AAAA,EACA,EAAE,MAAM,mBAAmB,QAAQ,CAAC,YAAY,cAAc,EAAE;AAAA,EAChE,EAAE,MAAM,eAAe,QAAQ,CAAC,cAAc,SAAS,OAAO,EAAE;AACjE;AAIA,IAAM,2BAAuD;AAAA,EAC5D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AACR;AAIO,IAAM,eAA+C;AAAA,EAC3D,GAAI,OAAO,KAAK,QAAQ,EAAmB,IAAI,CAAC,UAAU;AAAA,IACzD;AAAA,IACA,SAAS,SAAS;AAAA,IAClB,aAAa,yBAAyB;AAAA,EACvC,EAAE;AAAA,EACF;AAAA,IACC,SAAS,CAAC,YAAY,WAAW,QAAQ;AAAA,IACzC,aACC;AAAA,EACF;AACD;AAKA,IAAM,iBAAyC;AAAA,EAC9C,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,SAAS;AAAA,EACT,UAAU;AACX;AAEA,IAAM,gBAAgB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAQO,SAAS,iBAAiB,GAAG;AAAA,EACnC,MAAM,WAAW,IAAI;AAAA,EACrB,WAAW,QAAQ,uBAAuB,GAAG;AAAA,IAC5C,MAAM,SAAS,KAAK,MAAM,GAAG,KAAK,QAAQ,GAAG,CAAC;AAAA,IAC9C,MAAM,QAAQ,SAAS,IAAI,MAAM,KAAK,CAAC;AAAA,IACvC,MAAM,KAAK,IAAI;AAAA,IACf,SAAS,IAAI,QAAQ,KAAK;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ;AAAA,IACb,GAAG,cAAc,OAAO,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC;AAAA,IAC9C,GAAG,CAAC,GAAG,SAAS,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,SAAS,CAAC,CAAC;AAAA,EACjE;AAAA,EACA,MAAM,WAAW,MAAM,IAAI,CAAC,MAAM;AAAA,IACjC,MAAM,QAAQ,SAAS,IAAI,CAAC,KAAK,CAAC;AAAA,IAClC,MAAM,QAAQ,eAAe;AAAA,IAC7B,OAAO,QACJ,GAAG,OAAM,UAAU,MAAM,KAAK,IAAI,OAClC,GAAG,MAAM,MAAM,KAAK,IAAI;AAAA,GAC3B;AAAA,EACD,OAAO;AAAA,IACN;AAAA,IACA,eACC;AAAA,EACF;AAAA;AAID,IAAM,kBAAkB;AAAA,EACvB,MAAM;AAAA,EACN,YACC;AAAA,EACD,SACC;AAAA,EACD,WACC;AAAA,EACD,SACC;AACF;AAGA,IAAM,kBAAkB;AAAA,EACvB,OACC;AAAA,EACD,SAAS;AAAA,EACT,WACC;AACF;AAcA,eAAsB,YAAY,CACjC,OAAoB,EAAE,gBAAgB,UAAU,GAC/C;AAAA,EACD,MAAM,cAAc;AAAA,EACpB,MAAM,SAAS,CAAI,MAA6B,KAAK,OAAO,cAAc;AAAA,EAE1E,MAAM,OAAO,MAAM,KACjB,eAAe,EACf,QAAQ,EACR,MAAM,MAAM,IAAI;AAAA,EAElB,OAAO;AAAA,IACN,WAAW;AAAA,MACV,WAAW,QAAQ,QAAQ,IAAI,UAAU;AAAA,MACzC,eAAe,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,MACX,SAAS,OAAO,MAAM,OAAO;AAAA,MAC7B,YAAY,OAAO,MAAM,UAAU;AAAA,MACnC,UAAU,OAAO,MAAM,QAAQ;AAAA,MAC/B,WAAW,MAAM,YACd,KAAK,UAAU,IAAI,qBAAqB,IACxC;AAAA,MACH,eAAe,OAAO,MAAM,aAAa;AAAA,MACzC,UAAU,OAAO,MAAM,QAAQ;AAAA,MAC/B,SAAS,OAAO,MAAM,OAAO;AAAA,MAC7B,kBAAkB,OAAO,MAAM,gBAAgB;AAAA,IAChD;AAAA,IACA,cAAc,kBAAkB;AAAA,IAChC,eAAe;AAAA,IACf,YAAY;AAAA,EACb;AAAA;AAGM,SAAS,iBAAiB,CAAC,QAAmB;AAAA,EACpD,OAAO,SACN,WACA,yBACA;AAAA,IACC,aACC;AAAA,EACF,GACA,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,MAAM,aAAa,GAAG,MAAM,CAAC;AAAA,MACnD;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,WACA,yBACA,EAAE,aAAa,gDAAgD,GAC/D,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,mBAAmB,MAAM,CAAC;AAAA,MAChD;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,gBACA,8BACA,EAAE,aAAa,mDAAmD,GAClE,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,cAAc,MAAM,CAAC;AAAA,MAC3C;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,UACA,wBACA;AAAA,IACC,aACC;AAAA,EACF,GACA,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UACV;AAAA,UACC,QAAQ,gBAAgB,IAAI,CAAC,QAAQ;AAAA,YACpC;AAAA,YACA,aAAa,aAAa;AAAA,UAC3B,EAAE;AAAA,QACH,GACA,MACA,CACD;AAAA,MACD;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,kBACA,gCACA;AAAA,IACC,aACC;AAAA,EACF,GACA,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,sBAAsB,MAAM,CAAC;AAAA,MACnD;AAAA,IACD;AAAA,EACD,EACD;AAAA;;;AI5SD;AAKO,SAAS,oBAAoB,CAAC,QAAmB;AAAA,EACvD,WACC,QACA,kBACA,oDACA,CAAC,GACD,YAAY;AAAA,IACX,MAAM,SAAS,MAAM,WACpB,OACA,kBACD;AAAA,IACA,OAAO,aAAa,MAAM;AAAA,GAE5B;AAAA,EAEA,WACC,QACA,sBACA,+MACA;AAAA,IACC,SAAS,EACP,KAAK,CAAC,WAAW,OAAO,CAAC,EACzB,SAAS,EACT,SAAS,6BAA6B;AAAA,IACxC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,EAClE,GACA,SAAS,SAAS,WACjB,aAAa,MAAM,UAAU,EAAE,QAAQ,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,CAClE;AAAA;;;ACjCD,cAAS;AAOF,SAAS,qBAAqB,CACpC,QACA,iBAAiC,WAChC;AAAA,EACD,WAOC,QACA,kBACA,gLACA;AAAA,IACC,OAAO,GAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,IACvE,aAAa,GACX,KAAK,CAAC,YAAY,YAAY,KAAK,CAAC,EACpC,SAAS,EACT,SACA,mFACD;AAAA,IACD,SAAS,GACP,QAAQ,KAAK,EACb,SAAS,EACT,SAAS,kDAAmD;AAAA,IAC9D,OAAO,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAA+B;AAAA,IACrE,QAAQ,GACN,OAAO,EACP,SAAS,EACT,SAAS,mDAAmD;AAAA,EAC/D,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,UAAU,KAAK,MAAM,CAAC,CAC5D;AAAA,EAEA,WACC,QACA,oBACA,qSACA;AAAA,IACC,YAAY,GACV,OAAO,EACP,SAAS,uDAAsD;AAAA,EAClE,GACA,SAAS,iBAAiB;AAAA,IACzB,MAAM,WAAW,MAAM,eAAe,EAAE,UAAU,IAAI,YAAY;AAAA,MACjE,YAAY;AAAA,IACb,CAAC;AAAA,IACD,OAAO,WACJ,aAAa,QAAQ,IACrB,aACA;AAAA,MACC,OAAO;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,6BAA6B;AAAA,MACvC;AAAA,IACD,GACA,IACD;AAAA,GAEJ;AAAA;;;ACrED;AACA,cAAS;AAOT,IAAM,oBAAoB;AAG1B,IAAM,eAAe;AAAA,EACpB,YAAY,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,EAClE,YAAY,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,EAC3E,UAAU,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,8BAA8B;AAAA,EACvE,QAAQ,GACN,OAAO,EACP,SAAS,EACT,SAAS,mDAAmD;AAAA,EAC9D,OAAO,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAC/D;AAGA,IAAM,gBAAgB;AAAA,EACrB,YAAY,aAAa;AAAA,EACzB,UAAU,aAAa;AAAA,EACvB,QAAQ,aAAa;AAAA,EACrB,OAAO,aAAa;AACrB;AAEO,SAAS,kBAAkB,CACjC,QACA,iBAAiC,WAChC;AAAA,EACD,WASC,QACA,sBACA,iKACA;AAAA,OACI;AAAA,IACH,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,EAC3C,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,YAAY,KAAK,MAAM,CAAC,CACpE;AAAA,EAEA,WAUC,QACA,uBACA,wHACA;AAAA,OACI;AAAA,IACH,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC1C,iBAAiB,GACf,OAAO,EACP,SAAS,EACT,SAAS,8CAA8C;AAAA,EAC1D,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,aAAa,KAAK,MAAM,CAAC,CACrE;AAAA,EAEA,WAYC,QACA,gBACA,wYACA;AAAA,IACC,WAAW,GACT,KAAK,iBAAiB,EACtB,SAAS,uCAAuC;AAAA,OAC/C;AAAA,IACH,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC1C,iBAAiB,GACf,OAAO,EACP,SAAS,EACT,SAAS,6CAA6C;AAAA,IACxD,OAAO,GACL,OAAO,EACP,SAAS,EACT,SACA,qIACD;AAAA,EACF,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,CAC/D;AAAA,EAEA,WAUC,QACA,wBACA,yQACA;AAAA,OACI;AAAA,IACH,cAAc,GACZ,OAAO,EACP,SAAS,EACT,SAAS,gCAAgC;AAAA,IAC3C,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,OAAO,GACL,OAAO,EACP,SAAS,EACT,SACA,oGACD;AAAA,EACF,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,cAAc,KAAK,MAAM,CAAC,CACtE;AAAA,EAEA,WAMC,QACA,gBACA,0FACA,KAAK,cAAc,GACnB,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,CAC/D;AAAA,EAEA,WASC,QACA,sBACA,qIACA;AAAA,OACI;AAAA,IACH,MAAM,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACjE,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,EACpE,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,aAAa,KAAK,MAAM,CAAC,CACrE;AAAA,EAEA,WACC,QACA,kBACA,kPACA,CAAC,GACD,YAAY,aAAa,MAAM,eAAe,EAAE,MAAM,SAAS,CAAC,CACjE;AAAA,EAEA,WAGC,QACA,eACA,6PACA;AAAA,IACC,UAAU,GACR,MACA,GAAE,OAAO;AAAA,MACR,MAAM,GAAE,OAAO,EAAE,SAAS,sBAAsB;AAAA,MAChD,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACnD,CAAC,CACF,EACC,IAAI,CAAC,EACL,IAAI,EAAE,EACN,SAAS,yCAAyC;AAAA,EACrD,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,OAAO,QAAQ,CAAC,CAC5D;AAAA;;;AC7ND;AAEA,cAAS;AAQT,eAAe,QAAQ,CACtB,gBACA,YACwD;AAAA,EACxD,MAAM,WAAW,MAAM,eAAe,EAAE,UAAU,IAAI,YAAY;AAAA,IACjE,YAAY;AAAA,EACb,CAAC;AAAA,EACD,IAAI,CAAC;AAAA,IAAU,MAAM,IAAI,MAAM,uBAAuB,YAAY;AAAA,EAClE,MAAM,MAAM,SAAS;AAAA,EAIrB,IAAI,CAAC,KAAK;AAAA,IACT,MAAM,IAAI,MACT,wBAAwB,2BAA2B,SAAS,aAC7D;AAAA,EACD;AAAA,EACA,OAAO,EAAE,WAAW,IAAI,aAAa,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC,EAAE;AAAA;AAGxD,SAAS,qBAAqB,CACpC,QACA,iBAAiC,WAChC;AAAA,EACD,WACC,QACA,0BACA,gGACA;AAAA,IACC,YAAY,GACV,OAAO,EACP,SACA,6FACD;AAAA,IACD,cAAc,GACZ,OAAO,EACP,SAAS,EACT,SAAS,wDAAwD;AAAA,EACpE,GACA,SAAS,YAAY,mBAAmB;AAAA,IACvC,QAAQ,WAAW,SAAS,MAAM,SAAS,gBAAgB,UAAU;AAAA,IACrE,MAAM,OAAO,qBACZ,YACA,WACA,cACA,IACD;AAAA,IACA,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC,EAAE;AAAA,GAEnD;AAAA;;;ACrDM,SAAS,oBAAoB,CACnC,QACA,iBAAiC,WAChC;AAAA,EACD,WACC,QACA,iBACA,wbACA,CAAC,GACD,YAAY,aAAa,MAAM,eAAe,EAAE,QAAQ,MAAM,KAAK,CAAC,CACrE;AAAA;;;AChBD;AACA;AACA,cAAS;AAOF,SAAS,qBAAqB,CACpC,QACA,iBAAyC,WACxC;AAAA,EACD,WACC,QACA,kBACA,gJACA,CAAC,GACD,YAAY;AAAA,IACX,QAAQ,SAAS,MAAM,eAAe,EAAE,UAAU,KAAK;AAAA,IACvD,OAAO;AAAA,MACN,SAAS;AAAA,QACR;AAAA,UACC,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,KAAK,IAAI,qBAAqB,GAAG,MAAM,CAAC;AAAA,QAC9D;AAAA,MACD;AAAA,IACD;AAAA,GAEF;AAAA,EAEA,WACC,QACA,iBACA,+EACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,IAAI,IAAI;AAAA,IACxD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WAWC,QACA,mBACA,qnBACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,OAAO,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,IACvC,SAAS,GACP,OAAO,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,EAC7B,SAAS,EACT,SACA,kGACD;AAAA,IACD,MAAM,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IACxD,OAAO,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,YAAY;AAAA,IAC/D,OAAO,GACL,OAAO,EACP,IAAI,GAAG,EACP,SAAS,EACT,SAAS,gCAAgC;AAAA,IAC3C,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IAC9D,QAAQ,GACN,OAAO,EACP,SAAS,EACT,SACA,8DACD;AAAA,IACD,OAAO,GACL,QAAQ,EACR,SAAS,EACT,SAAS,2CAA2C;AAAA,EACvD,GACA;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACK;AAAA,IACL,IAAI,OAAO;AAAA,MACV,MAAM,UAAS,MAAM,eAAe,EAAE,UAAU,gBAC/C,MACA,OACA,EAAE,SAAS,MAAM,MAAM,CACxB;AAAA,MACA,OAAO;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,SAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,MAClE;AAAA,IACD;AAAA,IACA,MAAM,OAAO,MAAM,eAAe,EAAE,UAAU,WAAW,MAAM,OAAO;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,SAAS;AAAA,MAChB;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,MAAM,MAAM,SAAS;AAAA,IACrB,MAAM,SAAS,QACd,MACA,MAAM,MAAM,MAAM,GACnB;AAAA,IACA,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,qBACA,0KACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,qCAAqC;AAAA,IAChD,SAAS,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,EACzE,GACA,SAAS,MAAM,WAAW,cAAc;AAAA,IACvC,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,QAAQ,MAAM;AAAA,MAC7D;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,sBACA,2UACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,WAAW,GACT,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,yBAAyB;AAAA,IACpC,SAAS,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,uBAAuB;AAAA,EACzE,GACA,SAAS,MAAM,WAAW,cAAc;AAAA,IACvC,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,SAAS,MAAM;AAAA,MAC9D;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,kBACA,2MACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,KAAK,IAAI;AAAA,IACzD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WAMC,QACA,kBACA,wOACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,OAAO,GACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,oBAAoB;AAAA,IAC/B,QAAQ,GACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,SAAS,mBAAmB;AAAA,IAC9B,UAAU,GACR,QAAQ,EACR,SAAS,EACT,SAAS,qDAAqD;AAAA,EACjE,GACA,SAAS,MAAM,OAAO,QAAQ,eAAe;AAAA,IAC5C,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,KAAK,MAAM;AAAA,MAC1D;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,oBACA,kCACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,OAAO,IAAI;AAAA,IAC3D,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,CAAC,EAAE;AAAA,GAE7D;AAAA,EAEA,WAOC,QACA,oBACA,6vBACA;AAAA,IACC,MAAM,GACJ,OAAO,EACP,SAAS,2DAA2D;AAAA,IACtE,YAAY,GACV,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,SAAS,oDAAoD;AAAA,IAC/D,aAAa,GACX,OAAO,EACP,SAAS,EACT,SACA,wGACD;AAAA,IACD,QAAQ,GACN,QAAQ,EACR,SAAS,EACT,SACA,sFACD;AAAA,IACD,YAAY,GACV,KAAK,CAAC,UAAU,SAAS,CAAC,EAC1B,SAAS,EACT,SACA,+IACD;AAAA,EACF,GACA,SAAS,MAAM,YAAY,aAAa,QAAQ,iBAAiB;AAAA,IAChE,MAAM,UAAU,MAAM,mBAAmB,IAAI;AAAA,IAC7C,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,OAAO;AAAA,QACtD,MAAM,QAAQ;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,aAAa,QAAQ;AAAA,QACrB,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB,aAAa,QAAQ;AAAA,QACrB,YAAY;AAAA,WACR,eAAe,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,WAC7C,gBAAgB,YAAY,EAAE,YAAY,IAAI,CAAC;AAAA,WAC/C,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,WACrC,eAAe,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,MAClD,CAAC;AAAA,MACD,OAAO;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,MAClE;AAAA,MACC,OAAO,KAAK;AAAA,MAIb,IAAI,eAAe,wBAAwB;AAAA,QAC1C,OAAO;AAAA,UACN,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,MAAM,KAAK,UACV,EAAE,mBAAmB,SAAS,IAAI,QAAQ,GAC1C,MACA,CACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACA,MAAM;AAAA;AAAA,GAGT;AAAA,EAEA,WACC,QACA,qBACA,0NACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,QAAQ,IAAI;AAAA,IAC5D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,uBACA,yIACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,UAAU,IAAI;AAAA,IAC9D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA;;;ACjVD;AACA,cAAS;AAWF,SAAS,yBAAyB,CACxC,QACA,iBAA6C,WAC5C;AAAA,EACD,WACC,QACA,sBACA,wFACA,CAAC,GACD,YAAY;AAAA,IACX,QAAQ,SAAS,MAAM,eAAe,EAAE,cAAc,KAAK;AAAA,IAC3D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,CAAC;AAAA,IAChE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,qBACA,mFACA,EAAE,IAAI,GAAE,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAC7C,SAAS,SAAS;AAAA,IACjB,MAAM,SAAS,MAAM,eAAe,EAAE,cAAc,IAAI,EAAE;AAAA,IAC1D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WAiBC,QACA,wBACA,oVACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,yCAAyC;AAAA,IACnE,cAAc,GACZ,OAAO,EACP,SAAS,EACT,SAAS,kDAAkD;AAAA,IAC7D,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,mDAAmD;AAAA,IAC9D,UAAU,GACR,MACA,GAAE,OAAO;AAAA,MACR,MAAM,GAAE,KAAK,mBAAmB;AAAA,MAChC,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,MAChC,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,MAClC,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,MAC/B,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,MACrC,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,MAClC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,MACnC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,MACtD,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,IACvD,CAAC,CACF,EACC,SAAS,EACT,SACA,oTACD;AAAA,IACD,KAAK,GAAE,OAAO,EAAE,SAAS,aAAa;AAAA,IACtC,QAAQ,GACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC,EACA,SAAS,EACT,SAAS,yCAAyC;AAAA,IACpD,SAAS,GACP,KAAK,CAAC,WAAW,WAAW,cAAc,MAAM,CAAC,EACjD,SAAS,EACT,SAAS,uCAAuC;AAAA,IAClD,QAAQ,GACN,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SACA,qEACD;AAAA,IACD,YAAY,GACV,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SACA,gFACD;AAAA,EACF,GACA,OAAO,UAAU;AAAA,IAChB,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAChD,KACD;AAAA,IACA,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WAkBC,QACA,wBACA,uGACA;AAAA,IACC,IAAI,GAAE,OAAO;AAAA,IACb,MAAM,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,IAC9D,KAAK,GAAE,OAAO,EAAE,SAAS;AAAA,IACzB,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,IACnD,YAAY,GACV,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SAAS,qDAAqD;AAAA,IAChE,QAAQ,GACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC,EACA,SAAS;AAAA,IACX,SAAS,GACP,KAAK,CAAC,WAAW,WAAW,cAAc,MAAM,CAAC,EACjD,SAAS,EACT,SAAS;AAAA,IACX,YAAY,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC7C,WAAW,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAC9C,aAAa,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC/C,GACA,SAAS,OAAO,YAAY;AAAA,IAC3B,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAChD,IACA,KACD;AAAA,IACA,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WACC,QACA,wBACA,mEACA,EAAE,IAAI,GAAE,OAAO,EAAE,GACjB,SAAS,SAAS;AAAA,IACjB,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAAO,EAAE;AAAA,IAC1D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WACC,QACA,sBACA,gLACA,EAAE,IAAI,GAAE,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAC7C,SAAS,SAAS;AAAA,IACjB,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,KAAK,EAAE;AAAA,IACxD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WAMC,QACA,wBACA,yLACA;AAAA,IACC,IAAI,GAAE,OAAO;AAAA,IACb,WAAW,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACxC,SAAS,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACtC,OAAO,GACL,OAAO,EACP,SAAS,EACT,SACA,6DACD;AAAA,EACF,GACA,SAAS,IAAI,WAAW,SAAS,YAAY;AAAA,IAC5C,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAAO,IAAI;AAAA,MAC3D;AAAA,MACA;AAAA,SACI,UAAU,YAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACxC,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA;;;AXlPD,IAAM,aAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AACxD,IAAM,MAAM,KAAK,MAChB,aAAa,KAAK,YAAW,iBAAiB,GAAG,OAAO,CACzD;AAEO,SAAS,YAAY,GAAc;AAAA,EACzC,MAAM,SAAS,IAAI,UAAU;AAAA,IAC5B,MAAM;AAAA,IACN,SAAS,IAAI;AAAA,EACd,CAAC;AAAA,EAED,sBAAsB,MAAM;AAAA,EAC5B,sBAAsB,MAAM;AAAA,EAC5B,0BAA0B,MAAM;AAAA,EAChC,qBAAqB,MAAM;AAAA,EAC3B,mBAAmB,MAAM;AAAA,EACzB,qBAAqB,MAAM;AAAA,EAC3B,sBAAsB,MAAM;AAAA,EAC5B,kBAAkB,MAAM;AAAA,EAExB,OAAO;AAAA;;;ADxBR,IAAM,OAAO,OAAO,SAAS,QAAQ,IAAI,wBAAwB,MAAM;AACvE,IAAM,SAAS,QAAQ,IAAI;AAC3B,IAAM,WAAW,IAAI;AAErB,SAAS,YAAY,CAAC,KAA+B;AAAA,EACpD,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,OAAO,IAAI,QAAQ,kBAAkB,UAAU;AAAA;AAGhD,IAAM,aAAa,iBAClB,OAAO,KAAsB,QAAwB;AAAA,EAEpD,MAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,oBAAoB,MAAM;AAAA,EAC9D,IAAI,IAAI,aAAa,QAAQ;AAAA,IAC5B,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,YAAY,CAAC,CAAC;AAAA,IAC7D;AAAA,EACD;AAAA,EAGA,IAAI,CAAC,aAAa,GAAG,GAAG;AAAA,IACvB,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,CAAC;AAAA,IAChE;AAAA,EACD;AAAA,EAEA,MAAM,YAAY,IAAI,QAAQ;AAAA,EAE9B,IAAI,IAAI,WAAW,QAAQ;AAAA,IAE1B,MAAM,WAAW;AAAA,IACjB,MAAM,SAAmB,CAAC;AAAA,IAC1B,IAAI,YAAY;AAAA,IAChB,iBAAiB,SAAS,KAAK;AAAA,MAC9B,aAAc,MAAiB;AAAA,MAC/B,IAAI,YAAY,UAAU;AAAA,QACzB,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,yBAAyB,CAAC,CAAC;AAAA,QACzD;AAAA,MACD;AAAA,MACA,OAAO,KAAK,KAAe;AAAA,IAC5B;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,OAAO,KAAK,MAAM,OAAO,OAAO,MAAM,EAAE,SAAS,CAAC;AAAA,MACjD,MAAM;AAAA,MACP,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,CAAC;AAAA,MAChE;AAAA;AAAA,IAID,MAAM,eAAe,MAAM,QAAQ,IAAI,IACpC,KAAK,KAAK,CAAC,MAA2B,EAAE,WAAW,YAAY,IAC/D,KAAK,WAAW;AAAA,IAEnB,IAAI,cAAc;AAAA,MAEjB,MAAM,YAAY,IAAI,8BAA8B;AAAA,QACnD,oBAAoB,MAAM,OAAO,WAAW;AAAA,MAC7C,CAAC;AAAA,MACD,MAAM,SAAS,aAAa;AAAA,MAC5B,MAAM,OAAO,QAAQ,SAAS;AAAA,MAG9B,MAAM,UAAU,cAAc,KAAK,KAAK,IAAI;AAAA,MAE5C,IAAI,UAAU,WAAW;AAAA,QACxB,SAAS,IAAI,UAAU,WAAW,SAAS;AAAA,QAC3C,UAAU,UAAU,MAAM;AAAA,UACzB,IAAI,UAAU;AAAA,YAAW,SAAS,OAAO,UAAU,SAAS;AAAA;AAAA,MAE9D;AAAA,MACA;AAAA,IACD;AAAA,IAGA,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,GAAG;AAAA,MAC3C,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,IACA,MAAM,SAAS,IAAI,SAAS,GAAG,cAAc,KAAK,KAAK,IAAI;AAAA,EAC5D,EAAO,SAAI,IAAI,WAAW,OAAO;AAAA,IAEhC,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,GAAG;AAAA,MAC3C,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,IACA,MAAM,SAAS,IAAI,SAAS,GAAG,cAAc,KAAK,GAAG;AAAA,EACtD,EAAO,SAAI,IAAI,WAAW,UAAU;AAAA,IAEnC,IAAI,aAAa,SAAS,IAAI,SAAS,GAAG;AAAA,MAEzC,MAAM,YAAY,SAAS,IAAI,SAAS;AAAA,MACxC,MAAM,UAAU,cAAc,KAAK,GAAG;AAAA,MACtC,MAAM,UAAU,MAAM;AAAA,MACtB,SAAS,OAAO,SAAS;AAAA,IAC1B,EAAO;AAAA,MACN,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAAA;AAAA,EAElE,EAAO;AAAA,IACN,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,qBAAqB,CAAC,CAAC;AAAA;AAAA,CAGzE;AAEA,WAAW,OAAO,MAAM,MAAM;AAAA,EAC7B,QAAQ,MAAM,iDAAiD,MAAM;AAAA,EACrE,IAAI,CAAC;AAAA,IACJ,QAAQ,MACP,kEACD;AAAA,CACD;",
20
- "debugId": "CB0901E85835C61764756E2164756E21",
19
+ "mappings": ";;;AACA;AAAA,kBAGC;AAAA;AAED;;;ACNA;AACA;AACA;AACA;;;ACFA;AACA;AACA;;;ACHA;AACA;AAEA,IAAI,WAA+B;AAOnC,SAAS,UAAU,GAAuB;AAAA,EACzC,OAAO,QAAQ,IAAI;AAAA;AAepB,SAAS,cAAc,GAA6B;AAAA,EACnD,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,IAAI,CAAC;AAAA,IAAK;AAAA,EACV,MAAM,UAAU,oBAAoB,GAAG;AAAA,EAIvC,MAAM,WAAW,OAAO,QAAQ,IAAI,kBAAkB,EAAE;AAAA,EACxD,MAAM,OAAO,SAAS,OAAO;AAAA,IAC5B;AAAA,OACI,OAAO,SAAS,QAAQ,KAAK,WAAW,IACzC;AAAA,MACA,OAAO;AAAA,QACN,KAAK;AAAA,QACL,WAAW,OAAO,QAAQ,IAAI,yBAAyB,KAAK;AAAA,MAC7D;AAAA,IACD,IACC,CAAC;AAAA,EACL,CAAC;AAAA,EACD,MAAM,UAAU,OAAO,OAAqB,SAAuB;AAAA,IAClE,MAAM,MAAM,MAAM,KAAK,OAAO,IAAI;AAAA,IAClC,MAAM,UAAU,gBAAgB,GAAG;AAAA,IACnC,IAAI,SAAS;AAAA,MACZ,QAAQ,MACP,iCAAiC,QAAQ,SAAS,oBAAoB,QAAQ,MAC/E;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAIR,OAAO;AAAA;AAGD,SAAS,SAAS,GAAgB;AAAA,EACxC,IAAI,CAAC,UAAU;AAAA,IACd,MAAM,SAAS,WAAW;AAAA,IAC1B,MAAM,UAAU,QAAQ,IAAI;AAAA,IAC5B,MAAM,eAAe,QAAQ,IAAI;AAAA,IACjC,MAAM,YAAY,eAAe;AAAA,IACjC,WAAW,IAAI,YAAY;AAAA,SACtB,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3B,QAAQ;AAAA,SACJ,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,SACzB,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,SACnC,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IAClC,CAAC;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAKD,IAAM,UACZ,iDACA;AAGD,eAAsB,UAAa,CAClC,QACA,MACA,MACa;AAAA,EACb,MAAM,SAAS,WAAW;AAAA,EAC1B,MAAM,UACL,QAAQ,IAAI,uBAAuB;AAAA,EACpC,MAAM,MAAM,MAAM,MAAM,GAAG,UAAU,QAAQ;AAAA,IAC5C;AAAA,IACA,SAAS;AAAA,MACR,gBAAgB;AAAA,SACZ,SAAS,EAAE,eAAe,UAAU,SAAS,IAAI,CAAC;AAAA,IACvD;AAAA,IACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,EACrC,CAAC;AAAA,EACD,IAAI,CAAC,IAAI,IAAI;AAAA,IACZ,MAAM,OAAO,MAAM,IAAI,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IAC5C,MAAM,WAAW,CAAC,WAAW,IAAI,WAAW,OAAO,IAAI,WAAW;AAAA,IAClE,MAAM,OAAO,OACZ,IAAI,OAAO,QAAQ,QAAQ,IAAI,aAAa,WAAW,UAAU,GAAG,GACpE,EAAE,QAAQ,IAAI,OAAO,CACtB;AAAA,EACD;AAAA,EACA,IAAI,IAAI,WAAW;AAAA,IAAK;AAAA,EACxB,OAAO,IAAI,KAAK;AAAA;;;AC5GV,SAAS,qBAAqB,CAAC,GAMnC;AAAA,EACF,MAAM,SACL,QAAQ,IAAI,uBAAuB;AAAA,EACpC,OAAO;AAAA,IACN,MAAM,EAAE;AAAA,IACR,QAAQ,EAAE;AAAA,IACV,QAAQ,MAAM,QAAQ,EAAE,MAAM,IAAI,EAAE,SAAS,OAAO,KAAK,EAAE,MAAM;AAAA,IACjE,oBAAoB,EAAE;AAAA,OAClB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,OAE/C,EAAE,eAAe,WAClB,EAAE,WAAW,GAAG,uBAAuB,EAAE,OAAO,IAChD,CAAC;AAAA,EACL;AAAA;AAIM,SAAS,OAAU,CACzB,OACA,KACoD;AAAA,EACpD,OAAO;AAAA,IACN,OAAO,MAAM,MAAM,GAAG,GAAG;AAAA,IACzB,WAAW,MAAM,SAAS;AAAA,IAC1B,OAAO,MAAM;AAAA,EACd;AAAA;AAIM,SAAS,YAAY,CAC3B,MACA,SACwE;AAAA,EACxE,OAAO;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,CAAC;AAAA,OAC3D,WAAW,EAAE,SAAS,KAAK;AAAA,EAChC;AAAA;;;AChCD,IAAM,sBAAsB,IAAI;AAGzB,SAAS,sBAAsB,GAAa;AAAA,EAClD,OAAO,CAAC,GAAG,mBAAmB;AAAA;AAexB,SAAS,UAAa,CAC5B,QACA,MACA,aACA,QACA,SACO;AAAA,EACP,MAAM,iBAAiB,OAAO,SAAiC;AAAA,IAC9D,IAAI;AAAA,MACH,OAAO,MAAM,QAAQ,IAAI;AAAA,MACxB,OAAO,KAAc;AAAA,MACtB,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC/D,MAAM,SAEL,eAAe,SAAS,YAAY,MAAO,IAAY,SAAS;AAAA,MACjE,MAAM,OACL,WAAW,MACR,iBACA,WAAW,MACV,cACA,WAAW,MACV,iBACA,UAAU,MACT,iBACA;AAAA,MACP,OAAO;AAAA,QACN,SAAS;AAAA,UACR;AAAA,YACC,MAAM;AAAA,YACN,MAAM,KAAK,UAAU,EAAE,OAAO,EAAE,MAAM,QAAQ,QAAQ,EAAE,CAAC;AAAA,UAC1D;AAAA,QACD;AAAA,QACA,SAAS;AAAA,MACV;AAAA;AAAA;AAAA,EAGF,oBAAoB,IAAI,IAAI;AAAA,EAC3B,OAAO,KACP,MACA,aACA,QACA,cACD;AAAA;;;AHrDD,IAAM,eAAiE;AAAA,EACtE,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACZ;AAEO,IAAM,oBAAoB;AAAA,EAChC;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,aAAa,aAAa,WAAW;AAAA,EACzD;AAAA,EACA,EAAE,MAAM,YAAY,QAAQ,CAAC,aAAa,WAAW,EAAE;AAAA,EACvD,EAAE,MAAM,YAAY,QAAQ,CAAC,UAAU,WAAW,EAAE;AAAA,EACpD,EAAE,MAAM,YAAY,QAAQ,CAAC,iBAAiB,WAAW,EAAE;AAAA,EAC3D;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,aAAa,mBAAmB,aAAa,OAAO;AAAA,EACxE;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,aAAa,mBAAmB,aAAa,OAAO;AAAA,EAC9D;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,mBAAmB,aAAa,OAAO;AAAA,EAC3D;AAAA,EACA;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,UAAU,aAAa,mBAAmB,OAAO;AAAA,EAC3D;AAAA,EACA,EAAE,MAAM,YAAY,QAAQ,CAAC,aAAa,mBAAmB,OAAO,EAAE;AAAA,EACtE,EAAE,MAAM,YAAY,QAAQ,CAAC,UAAU,mBAAmB,OAAO,EAAE;AAAA,EACnE;AAAA,IACC,MAAM;AAAA,IACN,QAAQ,CAAC,cAAc,gBAAgB,UAAU,SAAS,KAAK;AAAA,EAChE;AAAA,EACA,EAAE,MAAM,mBAAmB,QAAQ,CAAC,YAAY,cAAc,EAAE;AAAA,EAChE,EAAE,MAAM,eAAe,QAAQ,CAAC,cAAc,SAAS,OAAO,EAAE;AACjE;AAIA,IAAM,2BAAuD;AAAA,EAC5D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AACR;AAIO,IAAM,eAA+C;AAAA,EAC3D,GAAI,OAAO,KAAK,QAAQ,EAAmB,IAAI,CAAC,UAAU;AAAA,IACzD;AAAA,IACA,SAAS,SAAS;AAAA,IAClB,aAAa,yBAAyB;AAAA,EACvC,EAAE;AAAA,EACF;AAAA,IACC,SAAS,CAAC,YAAY,WAAW,QAAQ;AAAA,IACzC,aACC;AAAA,EACF;AACD;AAKA,IAAM,iBAAyC;AAAA,EAC9C,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,SAAS;AAAA,EACT,UAAU;AACX;AAEA,IAAM,gBAAgB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAQO,SAAS,iBAAiB,GAAG;AAAA,EACnC,MAAM,WAAW,IAAI;AAAA,EACrB,WAAW,QAAQ,uBAAuB,GAAG;AAAA,IAC5C,MAAM,SAAS,KAAK,MAAM,GAAG,KAAK,QAAQ,GAAG,CAAC;AAAA,IAC9C,MAAM,QAAQ,SAAS,IAAI,MAAM,KAAK,CAAC;AAAA,IACvC,MAAM,KAAK,IAAI;AAAA,IACf,SAAS,IAAI,QAAQ,KAAK;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ;AAAA,IACb,GAAG,cAAc,OAAO,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC;AAAA,IAC9C,GAAG,CAAC,GAAG,SAAS,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,SAAS,CAAC,CAAC;AAAA,EACjE;AAAA,EACA,MAAM,WAAW,MAAM,IAAI,CAAC,MAAM;AAAA,IACjC,MAAM,QAAQ,SAAS,IAAI,CAAC,KAAK,CAAC;AAAA,IAClC,MAAM,QAAQ,eAAe;AAAA,IAC7B,OAAO,QACJ,GAAG,OAAM,UAAU,MAAM,KAAK,IAAI,OAClC,GAAG,MAAM,MAAM,KAAK,IAAI;AAAA,GAC3B;AAAA,EACD,OAAO;AAAA,IACN;AAAA,IACA,eACC;AAAA,EACF;AAAA;AAID,IAAM,kBAAkB;AAAA,EACvB,MAAM;AAAA,EACN,YACC;AAAA,EACD,SACC;AAAA,EACD,WACC;AAAA,EACD,SACC;AACF;AAGA,IAAM,kBAAkB;AAAA,EACvB,OACC;AAAA,EACD,SAAS;AAAA,EACT,WACC;AACF;AAcA,eAAsB,YAAY,CACjC,OAAoB,EAAE,gBAAgB,UAAU,GAC/C;AAAA,EACD,MAAM,cAAc;AAAA,EACpB,MAAM,SAAS,CAAI,MAA6B,KAAK,OAAO,cAAc;AAAA,EAE1E,MAAM,OAAO,MAAM,KACjB,eAAe,EACf,QAAQ,EACR,MAAM,MAAM,IAAI;AAAA,EAElB,OAAO;AAAA,IACN,WAAW;AAAA,MACV,WAAW,QAAQ,QAAQ,IAAI,UAAU;AAAA,MACzC,eAAe,QAAQ,QAAQ,IAAI,gBAAgB;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,MACX,SAAS,OAAO,MAAM,OAAO;AAAA,MAC7B,YAAY,OAAO,MAAM,UAAU;AAAA,MACnC,UAAU,OAAO,MAAM,QAAQ;AAAA,MAC/B,WAAW,MAAM,YACd,KAAK,UAAU,IAAI,qBAAqB,IACxC;AAAA,MACH,eAAe,OAAO,MAAM,aAAa;AAAA,MACzC,UAAU,OAAO,MAAM,QAAQ;AAAA,MAC/B,SAAS,OAAO,MAAM,OAAO;AAAA,MAC7B,kBAAkB,OAAO,MAAM,gBAAgB;AAAA,IAChD;AAAA,IACA,cAAc,kBAAkB;AAAA,IAChC,eAAe;AAAA,IACf,YAAY;AAAA,EACb;AAAA;AAGM,SAAS,iBAAiB,CAAC,QAAmB;AAAA,EACpD,OAAO,SACN,WACA,yBACA;AAAA,IACC,aACC;AAAA,EACF,GACA,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,MAAM,aAAa,GAAG,MAAM,CAAC;AAAA,MACnD;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,WACA,yBACA,EAAE,aAAa,gDAAgD,GAC/D,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,mBAAmB,MAAM,CAAC;AAAA,MAChD;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,gBACA,8BACA,EAAE,aAAa,mDAAmD,GAClE,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,cAAc,MAAM,CAAC;AAAA,MAC3C;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,UACA,wBACA;AAAA,IACC,aACC;AAAA,EACF,GACA,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UACV;AAAA,UACC,QAAQ,gBAAgB,IAAI,CAAC,QAAQ;AAAA,YACpC;AAAA,YACA,aAAa,aAAa;AAAA,UAC3B,EAAE;AAAA,QACH,GACA,MACA,CACD;AAAA,MACD;AAAA,IACD;AAAA,EACD,EACD;AAAA,EAEA,OAAO,SACN,kBACA,gCACA;AAAA,IACC,aACC;AAAA,EACF,GACA,aAAa;AAAA,IACZ,UAAU;AAAA,MACT;AAAA,QACC,KAAK;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,UAAU,sBAAsB,MAAM,CAAC;AAAA,MACnD;AAAA,IACD;AAAA,EACD,EACD;AAAA;;;AI5SD;AAKO,SAAS,oBAAoB,CAAC,QAAmB;AAAA,EACvD,WACC,QACA,kBACA,oDACA,CAAC,GACD,YAAY;AAAA,IACX,MAAM,SAAS,MAAM,WACpB,OACA,kBACD;AAAA,IACA,OAAO,aAAa,MAAM;AAAA,GAE5B;AAAA,EAEA,WACC,QACA,sBACA,+MACA;AAAA,IACC,SAAS,EACP,KAAK,CAAC,WAAW,OAAO,CAAC,EACzB,SAAS,EACT,SAAS,6BAA6B;AAAA,IACxC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,EAClE,GACA,SAAS,SAAS,WACjB,aAAa,MAAM,UAAU,EAAE,QAAQ,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,CAClE;AAAA;;;ACjCD,cAAS;AAOF,SAAS,qBAAqB,CACpC,QACA,iBAAiC,WAChC;AAAA,EACD,WAOC,QACA,kBACA,gLACA;AAAA,IACC,OAAO,GAAE,OAAO,EAAE,SAAS,4CAA4C;AAAA,IACvE,aAAa,GACX,KAAK,CAAC,YAAY,YAAY,KAAK,CAAC,EACpC,SAAS,EACT,SACA,mFACD;AAAA,IACD,SAAS,GACP,QAAQ,KAAK,EACb,SAAS,EACT,SAAS,kDAAmD;AAAA,IAC9D,OAAO,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAA+B;AAAA,IACrE,QAAQ,GACN,OAAO,EACP,SAAS,EACT,SAAS,mDAAmD;AAAA,EAC/D,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,UAAU,KAAK,MAAM,CAAC,CAC5D;AAAA,EAEA,WACC,QACA,oBACA,qSACA;AAAA,IACC,YAAY,GACV,OAAO,EACP,SAAS,uDAAsD;AAAA,EAClE,GACA,SAAS,iBAAiB;AAAA,IACzB,MAAM,WAAW,MAAM,eAAe,EAAE,UAAU,IAAI,YAAY;AAAA,MACjE,YAAY;AAAA,IACb,CAAC;AAAA,IACD,OAAO,WACJ,aAAa,QAAQ,IACrB,aACA;AAAA,MACC,OAAO;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,6BAA6B;AAAA,MACvC;AAAA,IACD,GACA,IACD;AAAA,GAEJ;AAAA;;;ACrED;AACA,cAAS;AAOT,IAAM,oBAAoB;AAG1B,IAAM,eAAe;AAAA,EACpB,YAAY,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,EAClE,YAAY,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,EAC3E,UAAU,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,8BAA8B;AAAA,EACvE,QAAQ,GACN,OAAO,EACP,SAAS,EACT,SAAS,mDAAmD;AAAA,EAC9D,OAAO,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,wBAAwB;AAC/D;AAGA,IAAM,gBAAgB;AAAA,EACrB,YAAY,aAAa;AAAA,EACzB,UAAU,aAAa;AAAA,EACvB,QAAQ,aAAa;AAAA,EACrB,OAAO,aAAa;AACrB;AAEO,SAAS,kBAAkB,CACjC,QACA,iBAAiC,WAChC;AAAA,EACD,WASC,QACA,sBACA,8JACA;AAAA,OACI;AAAA,IACH,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,EAC3C,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,YAAY,KAAK,MAAM,CAAC,CACpE;AAAA,EAEA,WAUC,QACA,uBACA,wHACA;AAAA,OACI;AAAA,IACH,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC1C,iBAAiB,GACf,OAAO,EACP,SAAS,EACT,SAAS,8CAA8C;AAAA,EAC1D,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,aAAa,KAAK,MAAM,CAAC,CACrE;AAAA,EAEA,WAYC,QACA,gBACA,wYACA;AAAA,IACC,WAAW,GACT,KAAK,iBAAiB,EACtB,SAAS,uCAAuC;AAAA,OAC/C;AAAA,IACH,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,+BAA+B;AAAA,IAC1C,iBAAiB,GACf,OAAO,EACP,SAAS,EACT,SAAS,6CAA6C;AAAA,IACxD,OAAO,GACL,OAAO,EACP,SAAS,EACT,SACA,qIACD;AAAA,EACF,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,CAC/D;AAAA,EAEA,WAUC,QACA,wBACA,yQACA;AAAA,OACI;AAAA,IACH,cAAc,GACZ,OAAO,EACP,SAAS,EACT,SAAS,gCAAgC;AAAA,IAC3C,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACnE,OAAO,GACL,OAAO,EACP,SAAS,EACT,SACA,oGACD;AAAA,EACF,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,cAAc,KAAK,MAAM,CAAC,CACtE;AAAA,EAEA,WAMC,QACA,gBACA,0FACA,KAAK,cAAc,GACnB,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,CAC/D;AAAA,EAEA,WASC,QACA,sBACA,qIACA;AAAA,OACI;AAAA,IACH,MAAM,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IACjE,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,EACpE,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,aAAa,KAAK,MAAM,CAAC,CACrE;AAAA,EAEA,WACC,QACA,sBACA,8SACA;AAAA,IACC,YAAY,GACV,OAAO,EACP,SAAS,sDAAqD;AAAA,EACjE,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,YAAY,OAAO,UAAU,CAAC,CAC1E;AAAA,EAEA,WACC,QACA,kBACA,kPACA,CAAC,GACD,YAAY,aAAa,MAAM,eAAe,EAAE,MAAM,SAAS,CAAC,CACjE;AAAA,EAEA,WAGC,QACA,eACA,6PACA;AAAA,IACC,UAAU,GACR,MACA,GAAE,OAAO;AAAA,MACR,MAAM,GAAE,OAAO,EAAE,SAAS,sBAAsB;AAAA,MAChD,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACnD,CAAC,CACF,EACC,IAAI,CAAC,EACL,IAAI,EAAE,EACN,SAAS,yCAAyC;AAAA,EACrD,GACA,OAAO,WACN,aAAa,MAAM,eAAe,EAAE,MAAM,OAAO,QAAQ,CAAC,CAC5D;AAAA;;;AC1OD;AAEA,cAAS;AAQT,eAAe,QAAQ,CACtB,gBACA,YACwD;AAAA,EACxD,MAAM,WAAW,MAAM,eAAe,EAAE,UAAU,IAAI,YAAY;AAAA,IACjE,YAAY;AAAA,EACb,CAAC;AAAA,EACD,IAAI,CAAC;AAAA,IAAU,MAAM,IAAI,MAAM,uBAAuB,YAAY;AAAA,EAClE,MAAM,MAAM,SAAS;AAAA,EAIrB,IAAI,CAAC,KAAK;AAAA,IACT,MAAM,IAAI,MACT,wBAAwB,2BAA2B,SAAS,aAC7D;AAAA,EACD;AAAA,EACA,OAAO,EAAE,WAAW,IAAI,aAAa,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC,EAAE;AAAA;AAGxD,SAAS,qBAAqB,CACpC,QACA,iBAAiC,WAChC;AAAA,EACD,WACC,QACA,0BACA,gGACA;AAAA,IACC,YAAY,GACV,OAAO,EACP,SACA,6FACD;AAAA,IACD,cAAc,GACZ,OAAO,EACP,SAAS,EACT,SAAS,wDAAwD;AAAA,EACpE,GACA,SAAS,YAAY,mBAAmB;AAAA,IACvC,QAAQ,WAAW,SAAS,MAAM,SAAS,gBAAgB,UAAU;AAAA,IACrE,MAAM,OAAO,qBACZ,YACA,WACA,cACA,IACD;AAAA,IACA,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC,EAAE;AAAA,GAEnD;AAAA;;;ACrDM,SAAS,oBAAoB,CACnC,QACA,iBAAiC,WAChC;AAAA,EACD,WACC,QACA,iBACA,wbACA,CAAC,GACD,YAAY,aAAa,MAAM,eAAe,EAAE,QAAQ,MAAM,KAAK,CAAC,CACrE;AAAA;;;AChBD;AACA;AACA,cAAS;AAOF,SAAS,qBAAqB,CACpC,QACA,iBAAyC,WACxC;AAAA,EACD,WACC,QACA,kBACA,gJACA,CAAC,GACD,YAAY;AAAA,IACX,QAAQ,SAAS,MAAM,eAAe,EAAE,UAAU,KAAK;AAAA,IACvD,OAAO;AAAA,MACN,SAAS;AAAA,QACR;AAAA,UACC,MAAM;AAAA,UACN,MAAM,KAAK,UAAU,KAAK,IAAI,qBAAqB,GAAG,MAAM,CAAC;AAAA,QAC9D;AAAA,MACD;AAAA,IACD;AAAA,GAEF;AAAA,EAEA,WACC,QACA,iBACA,+EACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,IAAI,IAAI;AAAA,IACxD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WAWC,QACA,mBACA,qnBACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,OAAO,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,IACvC,SAAS,GACP,OAAO,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,EAC7B,SAAS,EACT,SACA,kGACD;AAAA,IACD,MAAM,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAAA,IACxD,OAAO,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,YAAY;AAAA,IAC/D,OAAO,GACL,OAAO,EACP,IAAI,GAAG,EACP,SAAS,EACT,SAAS,gCAAgC;AAAA,IAC3C,QAAQ,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,IAC9D,QAAQ,GACN,OAAO,EACP,SAAS,EACT,SACA,8DACD;AAAA,IACD,OAAO,GACL,QAAQ,EACR,SAAS,EACT,SAAS,2CAA2C;AAAA,EACvD,GACA;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACK;AAAA,IACL,IAAI,OAAO;AAAA,MACV,MAAM,UAAS,MAAM,eAAe,EAAE,UAAU,gBAC/C,MACA,OACA,EAAE,SAAS,MAAM,MAAM,CACxB;AAAA,MACA,OAAO;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,SAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,MAClE;AAAA,IACD;AAAA,IACA,MAAM,OAAO,MAAM,eAAe,EAAE,UAAU,WAAW,MAAM,OAAO;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,SAAS;AAAA,MAChB;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,MAAM,MAAM,SAAS;AAAA,IACrB,MAAM,SAAS,QACd,MACA,MAAM,MAAM,MAAM,GACnB;AAAA,IACA,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,qBACA,0KACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,qCAAqC;AAAA,IAChD,SAAS,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,EACzE,GACA,SAAS,MAAM,WAAW,cAAc;AAAA,IACvC,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,QAAQ,MAAM;AAAA,MAC7D;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,sBACA,2UACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,WAAW,GACT,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,yBAAyB;AAAA,IACpC,SAAS,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,uBAAuB;AAAA,EACzE,GACA,SAAS,MAAM,WAAW,cAAc;AAAA,IACvC,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,SAAS,MAAM;AAAA,MAC9D;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,kBACA,2MACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,KAAK,IAAI;AAAA,IACzD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WAMC,QACA,kBACA,wOACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,IACzC,OAAO,GACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,oBAAoB;AAAA,IAC/B,QAAQ,GACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,SAAS,mBAAmB;AAAA,IAC9B,UAAU,GACR,QAAQ,EACR,SAAS,EACT,SAAS,qDAAqD;AAAA,EACjE,GACA,SAAS,MAAM,OAAO,QAAQ,eAAe;AAAA,IAC5C,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,KAAK,MAAM;AAAA,MAC1D;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,oBACA,kCACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,OAAO,IAAI;AAAA,IAC3D,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,CAAC,EAAE;AAAA,GAE7D;AAAA,EAEA,WAOC,QACA,oBACA,6vBACA;AAAA,IACC,MAAM,GACJ,OAAO,EACP,SAAS,2DAA2D;AAAA,IACtE,YAAY,GACV,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,SAAS,oDAAoD;AAAA,IAC/D,aAAa,GACX,OAAO,EACP,SAAS,EACT,SACA,wGACD;AAAA,IACD,QAAQ,GACN,QAAQ,EACR,SAAS,EACT,SACA,sFACD;AAAA,IACD,YAAY,GACV,KAAK,CAAC,UAAU,SAAS,CAAC,EAC1B,SAAS,EACT,SACA,+IACD;AAAA,EACF,GACA,SAAS,MAAM,YAAY,aAAa,QAAQ,iBAAiB;AAAA,IAChE,MAAM,UAAU,MAAM,mBAAmB,IAAI;AAAA,IAC7C,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,OAAO;AAAA,QACtD,MAAM,QAAQ;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,aAAa,QAAQ;AAAA,QACrB,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB,aAAa,QAAQ;AAAA,QACrB,YAAY;AAAA,WACR,eAAe,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,WAC7C,gBAAgB,YAAY,EAAE,YAAY,IAAI,CAAC;AAAA,WAC/C,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,WACrC,eAAe,YAAY,EAAE,WAAW,IAAI,CAAC;AAAA,MAClD,CAAC;AAAA,MACD,OAAO;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,MAClE;AAAA,MACC,OAAO,KAAK;AAAA,MAIb,IAAI,eAAe,wBAAwB;AAAA,QAC1C,OAAO;AAAA,UACN,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,MAAM,KAAK,UACV,EAAE,mBAAmB,SAAS,IAAI,QAAQ,GAC1C,MACA,CACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACA,MAAM;AAAA;AAAA,GAGT;AAAA,EAEA,WACC,QACA,qBACA,0NACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,QAAQ,IAAI;AAAA,IAC5D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,uBACA,yIACA,EAAE,MAAM,GAAE,OAAO,EAAE,SAAS,eAAe,EAAE,GAC7C,SAAS,WAAW;AAAA,IACnB,MAAM,SAAS,MAAM,eAAe,EAAE,UAAU,UAAU,IAAI;AAAA,IAC9D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA;;;ACjVD;AACA,cAAS;AAWF,SAAS,yBAAyB,CACxC,QACA,iBAA6C,WAC5C;AAAA,EACD,WACC,QACA,sBACA,wFACA,CAAC,GACD,YAAY;AAAA,IACX,QAAQ,SAAS,MAAM,eAAe,EAAE,cAAc,KAAK;AAAA,IAC3D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,CAAC;AAAA,IAChE;AAAA,GAEF;AAAA,EAEA,WACC,QACA,qBACA,mFACA,EAAE,IAAI,GAAE,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAC7C,SAAS,SAAS;AAAA,IACjB,MAAM,SAAS,MAAM,eAAe,EAAE,cAAc,IAAI,EAAE;AAAA,IAC1D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,IAClE;AAAA,GAEF;AAAA,EAEA,WAiBC,QACA,wBACA,oVACA;AAAA,IACC,MAAM,GAAE,OAAO,EAAE,SAAS,yCAAyC;AAAA,IACnE,cAAc,GACZ,OAAO,EACP,SAAS,EACT,SAAS,kDAAkD;AAAA,IAC7D,WAAW,GACT,OAAO,EACP,SAAS,EACT,SAAS,mDAAmD;AAAA,IAC9D,UAAU,GACR,MACA,GAAE,OAAO;AAAA,MACR,MAAM,GAAE,KAAK,mBAAmB;AAAA,MAChC,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,MAChC,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,MAClC,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,MAC/B,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,MACrC,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,MAClC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,MACnC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,MACtD,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,IACvD,CAAC,CACF,EACC,SAAS,EACT,SACA,oTACD;AAAA,IACD,KAAK,GAAE,OAAO,EAAE,SAAS,aAAa;AAAA,IACtC,QAAQ,GACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC,EACA,SAAS,EACT,SAAS,yCAAyC;AAAA,IACpD,SAAS,GACP,KAAK,CAAC,WAAW,WAAW,cAAc,MAAM,CAAC,EACjD,SAAS,EACT,SAAS,uCAAuC;AAAA,IAClD,QAAQ,GACN,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SACA,qEACD;AAAA,IACD,YAAY,GACV,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SACA,gFACD;AAAA,EACF,GACA,OAAO,UAAU;AAAA,IAChB,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAChD,KACD;AAAA,IACA,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WAkBC,QACA,wBACA,uGACA;AAAA,IACC,IAAI,GAAE,OAAO;AAAA,IACb,MAAM,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,IAC9D,KAAK,GAAE,OAAO,EAAE,SAAS;AAAA,IACzB,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,IACnD,YAAY,GACV,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SAAS,qDAAqD;AAAA,IAChE,QAAQ,GACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC,EACA,SAAS;AAAA,IACX,SAAS,GACP,KAAK,CAAC,WAAW,WAAW,cAAc,MAAM,CAAC,EACjD,SAAS,EACT,SAAS;AAAA,IACX,YAAY,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC7C,WAAW,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAC9C,aAAa,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC/C,GACA,SAAS,OAAO,YAAY;AAAA,IAC3B,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAChD,IACA,KACD;AAAA,IACA,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WACC,QACA,wBACA,mEACA,EAAE,IAAI,GAAE,OAAO,EAAE,GACjB,SAAS,SAAS;AAAA,IACjB,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAAO,EAAE;AAAA,IAC1D,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WACC,QACA,sBACA,gLACA,EAAE,IAAI,GAAE,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAC7C,SAAS,SAAS;AAAA,IACjB,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,KAAK,EAAE;AAAA,IACxD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA,EAEA,WAMC,QACA,wBACA,yLACA;AAAA,IACC,IAAI,GAAE,OAAO;AAAA,IACb,WAAW,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACxC,SAAS,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACtC,OAAO,GACL,OAAO,EACP,SAAS,EACT,SACA,6DACD;AAAA,EACF,GACA,SAAS,IAAI,WAAW,SAAS,YAAY;AAAA,IAC5C,MAAM,MAAM,MAAM,eAAe,EAAE,cAAc,OAAO,IAAI;AAAA,MAC3D;AAAA,MACA;AAAA,SACI,UAAU,YAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACxC,CAAC;AAAA,IACD,OAAO;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,GAEF;AAAA;;;AXlPD,IAAM,aAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AACxD,IAAM,MAAM,KAAK,MAChB,aAAa,KAAK,YAAW,iBAAiB,GAAG,OAAO,CACzD;AAEO,SAAS,YAAY,GAAc;AAAA,EACzC,MAAM,SAAS,IAAI,UAAU;AAAA,IAC5B,MAAM;AAAA,IACN,SAAS,IAAI;AAAA,EACd,CAAC;AAAA,EAED,sBAAsB,MAAM;AAAA,EAC5B,sBAAsB,MAAM;AAAA,EAC5B,0BAA0B,MAAM;AAAA,EAChC,qBAAqB,MAAM;AAAA,EAC3B,mBAAmB,MAAM;AAAA,EACzB,qBAAqB,MAAM;AAAA,EAC3B,sBAAsB,MAAM;AAAA,EAC5B,kBAAkB,MAAM;AAAA,EAExB,OAAO;AAAA;;;ADxBR,IAAM,OAAO,OAAO,SAAS,QAAQ,IAAI,wBAAwB,MAAM;AACvE,IAAM,SAAS,QAAQ,IAAI;AAC3B,IAAM,WAAW,IAAI;AAErB,SAAS,YAAY,CAAC,KAA+B;AAAA,EACpD,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,OAAO,IAAI,QAAQ,kBAAkB,UAAU;AAAA;AAGhD,IAAM,aAAa,iBAClB,OAAO,KAAsB,QAAwB;AAAA,EAEpD,MAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,oBAAoB,MAAM;AAAA,EAC9D,IAAI,IAAI,aAAa,QAAQ;AAAA,IAC5B,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,YAAY,CAAC,CAAC;AAAA,IAC7D;AAAA,EACD;AAAA,EAGA,IAAI,CAAC,aAAa,GAAG,GAAG;AAAA,IACvB,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,CAAC;AAAA,IAChE;AAAA,EACD;AAAA,EAEA,MAAM,YAAY,IAAI,QAAQ;AAAA,EAE9B,IAAI,IAAI,WAAW,QAAQ;AAAA,IAE1B,MAAM,WAAW;AAAA,IACjB,MAAM,SAAmB,CAAC;AAAA,IAC1B,IAAI,YAAY;AAAA,IAChB,iBAAiB,SAAS,KAAK;AAAA,MAC9B,aAAc,MAAiB;AAAA,MAC/B,IAAI,YAAY,UAAU;AAAA,QACzB,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,yBAAyB,CAAC,CAAC;AAAA,QACzD;AAAA,MACD;AAAA,MACA,OAAO,KAAK,KAAe;AAAA,IAC5B;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,OAAO,KAAK,MAAM,OAAO,OAAO,MAAM,EAAE,SAAS,CAAC;AAAA,MACjD,MAAM;AAAA,MACP,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,CAAC;AAAA,MAChE;AAAA;AAAA,IAID,MAAM,eAAe,MAAM,QAAQ,IAAI,IACpC,KAAK,KAAK,CAAC,MAA2B,EAAE,WAAW,YAAY,IAC/D,KAAK,WAAW;AAAA,IAEnB,IAAI,cAAc;AAAA,MAEjB,MAAM,YAAY,IAAI,8BAA8B;AAAA,QACnD,oBAAoB,MAAM,OAAO,WAAW;AAAA,MAC7C,CAAC;AAAA,MACD,MAAM,SAAS,aAAa;AAAA,MAC5B,MAAM,OAAO,QAAQ,SAAS;AAAA,MAG9B,MAAM,UAAU,cAAc,KAAK,KAAK,IAAI;AAAA,MAE5C,IAAI,UAAU,WAAW;AAAA,QACxB,SAAS,IAAI,UAAU,WAAW,SAAS;AAAA,QAC3C,UAAU,UAAU,MAAM;AAAA,UACzB,IAAI,UAAU;AAAA,YAAW,SAAS,OAAO,UAAU,SAAS;AAAA;AAAA,MAE9D;AAAA,MACA;AAAA,IACD;AAAA,IAGA,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,GAAG;AAAA,MAC3C,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,IACA,MAAM,SAAS,IAAI,SAAS,GAAG,cAAc,KAAK,KAAK,IAAI;AAAA,EAC5D,EAAO,SAAI,IAAI,WAAW,OAAO;AAAA,IAEhC,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,GAAG;AAAA,MAC3C,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,IACA,MAAM,SAAS,IAAI,SAAS,GAAG,cAAc,KAAK,GAAG;AAAA,EACtD,EAAO,SAAI,IAAI,WAAW,UAAU;AAAA,IAEnC,IAAI,aAAa,SAAS,IAAI,SAAS,GAAG;AAAA,MAEzC,MAAM,YAAY,SAAS,IAAI,SAAS;AAAA,MACxC,MAAM,UAAU,cAAc,KAAK,GAAG;AAAA,MACtC,MAAM,UAAU,MAAM;AAAA,MACtB,SAAS,OAAO,SAAS;AAAA,IAC1B,EAAO;AAAA,MACN,IACE,UAAU,GAAG,EACb,IAAI,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC,CAAC;AAAA;AAAA,EAElE,EAAO;AAAA,IACN,IAAI,UAAU,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,OAAO,qBAAqB,CAAC,CAAC;AAAA;AAAA,CAGzE;AAEA,WAAW,OAAO,MAAM,MAAM;AAAA,EAC7B,QAAQ,MAAM,iDAAiD,MAAM;AAAA,EACrE,IAAI,CAAC;AAAA,IACJ,QAAQ,MACP,kEACD;AAAA,CACD;",
20
+ "debugId": "AB1366D442AFDAE964756E2164756E21",
21
21
  "names": []
22
22
  }
package/dist/bin.js CHANGED
@@ -198,7 +198,7 @@ var COLUMN_TYPES = [
198
198
  }
199
199
  ];
200
200
  var PRODUCT_BLURBS = {
201
- index: "decoded L2 events, transfers, contract calls, blocks, transactions",
201
+ index: "decoded events, transfers, contract calls, blocks, transactions",
202
202
  streams: "bulk parquet dumps of the raw chain event firehose",
203
203
  contracts: "trait-based contract discovery and ABIs",
204
204
  subgraphs: "author/deploy/query custom indexes",
@@ -389,7 +389,7 @@ var heightFilters = {
389
389
  limit: rangeFilters.limit
390
390
  };
391
391
  function registerIndexTools(server, clientProvider = getClient) {
392
- defineTool(server, "index_ft_transfers", "List decoded SIP-010 fungible-token transfers from the Index (L2 decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).", {
392
+ defineTool(server, "index_ft_transfers", "List decoded SIP-010 fungible-token transfers from the Index (decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).", {
393
393
  ...rangeFilters,
394
394
  sender: z3.string().optional().describe("Filter by sender principal"),
395
395
  recipient: z3.string().optional().describe("Filter by recipient principal")
@@ -420,6 +420,9 @@ function registerIndexTools(server, clientProvider = getClient) {
420
420
  type: z3.string().optional().describe("Filter by transaction type"),
421
421
  sender: z3.string().optional().describe("Filter by sender principal")
422
422
  }, async (params) => jsonResponse(await clientProvider().index.transactions.list(params)));
423
+ defineTool(server, "index_print_schema", "Empirical per-topic print payload schemas for a contract, inferred from sampled on-chain events: each topic's fields with observed Clarity types, decoded TS types, subgraph column types, and presence rates. Use before writing print_event subgraph handlers to learn what's on e.data. Anonymous read.", {
424
+ contractId: z3.string().describe("Contract id (SP….name) whose print events to profile")
425
+ }, async (params) => jsonResponse(await clientProvider().index.printSchema(params.contractId)));
423
426
  defineTool(server, "index_discover", "Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.", {}, async () => jsonResponse(await clientProvider().index.discover()));
424
427
  defineTool(server, "batch_query", "Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.", {
425
428
  requests: z3.array(z3.object({
@@ -758,5 +761,5 @@ var server = createServer();
758
761
  var transport = new StdioServerTransport;
759
762
  await server.connect(transport);
760
763
 
761
- //# debugId=63BF73C1A0B18EDD64756E2164756E21
764
+ //# debugId=8D149B8CC4B9C7C464756E2164756E21
762
765
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -4,19 +4,19 @@
4
4
  "sourcesContent": [
5
5
  "#!/usr/bin/env node\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServer } from \"./server.ts\";\n\nconst server = createServer();\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\n",
6
6
  "import { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { registerResources } from \"./resources.ts\";\nimport { registerAccountTools } from \"./tools/account.ts\";\nimport { registerContractTools } from \"./tools/contracts.ts\";\nimport { registerIndexTools } from \"./tools/index.ts\";\nimport { registerScaffoldTools } from \"./tools/scaffold.ts\";\nimport { registerStreamsTools } from \"./tools/streams.ts\";\nimport { registerSubgraphTools } from \"./tools/subgraphs.ts\";\nimport { registerSubscriptionTools } from \"./tools/subscriptions.ts\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(\n\treadFileSync(join(__dirname, \"../package.json\"), \"utf-8\"),\n);\n\nexport function createServer(): McpServer {\n\tconst server = new McpServer({\n\t\tname: \"secondlayer\",\n\t\tversion: pkg.version,\n\t});\n\n\tregisterScaffoldTools(server);\n\tregisterSubgraphTools(server);\n\tregisterSubscriptionTools(server);\n\tregisterAccountTools(server);\n\tregisterIndexTools(server);\n\tregisterStreamsTools(server);\n\tregisterContractTools(server);\n\tregisterResources(server);\n\n\treturn server;\n}\n",
7
- "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { CHAIN_TRIGGER_FIELDS } from \"@secondlayer/shared\";\nimport { TRAIT_STANDARDS } from \"@secondlayer/stacks/clarity\";\nimport { TYPE_MAP } from \"@secondlayer/subgraphs/schema\";\nimport type { ColumnType } from \"@secondlayer/subgraphs/types\";\nimport { getClient } from \"./lib/client.ts\";\nimport { formatSubgraphSummary } from \"./lib/format.ts\";\nimport { getRegisteredToolNames } from \"./lib/tool.ts\";\n\n// SubgraphFilter vocabulary — the per-type fields an agent may set on a source\n// filter. Fields are hand-authored (the per-type breakdown lives only in the\n// SubgraphFilter interfaces), but the drift test in resources.test.ts locks the\n// type set to VALID_FILTER_TYPES and asserts every field is accepted by the\n// `.strict()` SubgraphFilterSchema, so this can never advertise a field the\n// validator rejects. `trait` (TraitScope) indexes all contracts of a standard\n// (e.g. all SIP-010 tokens). `prints` on print_event is type-level only (not a\n// runtime match field) and is intentionally omitted.\n// One-line human blurb per SIP trait standard, keyed by TRAIT_STANDARDS so a new\n// standard forces an entry here.\nconst TRAIT_BLURBS: Record<(typeof TRAIT_STANDARDS)[number], string> = {\n\t\"sip-009\": \"Non-fungible token (NFT) standard\",\n\t\"sip-010\": \"Fungible token standard\",\n\t\"sip-013\": \"Semi-fungible token standard\",\n};\n\nexport const FILTERS_REFERENCE = [\n\t{\n\t\ttype: \"stx_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"minAmount\", \"maxAmount\"],\n\t},\n\t{ type: \"stx_mint\", fields: [\"recipient\", \"minAmount\"] },\n\t{ type: \"stx_burn\", fields: [\"sender\", \"minAmount\"] },\n\t{ type: \"stx_lock\", fields: [\"lockedAddress\", \"minAmount\"] },\n\t{\n\t\ttype: \"ft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_mint\",\n\t\tfields: [\"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_burn\",\n\t\tfields: [\"sender\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"nft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"trait\"],\n\t},\n\t{ type: \"nft_mint\", fields: [\"recipient\", \"assetIdentifier\", \"trait\"] },\n\t{ type: \"nft_burn\", fields: [\"sender\", \"assetIdentifier\", \"trait\"] },\n\t{\n\t\ttype: \"contract_call\",\n\t\tfields: [\"contractId\", \"functionName\", \"caller\", \"trait\", \"abi\"],\n\t},\n\t{ type: \"contract_deploy\", fields: [\"deployer\", \"contractName\"] },\n\t{ type: \"print_event\", fields: [\"contractId\", \"topic\", \"trait\"] },\n];\n\n// Human blurb per column type, keyed by ColumnType so adding a type to the union\n// forces an entry here (the drift test in resources.test.ts asserts full coverage).\nconst COLUMN_TYPE_DESCRIPTIONS: Record<ColumnType, string> = {\n\ttext: \"UTF-8 string\",\n\tuint: \"Unsigned integer (Clarity uint) — NUMERIC for lossless 128-bit range\",\n\tint: \"Signed integer (Clarity int) — NUMERIC for lossless 128-bit range\",\n\tprincipal: \"Stacks address (standard or contract)\",\n\tboolean: \"Boolean value\",\n\ttimestamp: \"Timestamp with time zone\",\n\tjsonb: \"Arbitrary JSON data\",\n};\n\n// Derived from the subgraphs TYPE_MAP so the type→SQL mapping can't drift behind\n// the deployer (which is what actually creates the columns).\nexport const COLUMN_TYPES: Array<Record<string, unknown>> = [\n\t...(Object.keys(TYPE_MAP) as ColumnType[]).map((type) => ({\n\t\ttype,\n\t\tsqlType: TYPE_MAP[type],\n\t\tdescription: COLUMN_TYPE_DESCRIPTIONS[type],\n\t})),\n\t{\n\t\toptions: [\"nullable\", \"indexed\", \"search\"],\n\t\tdescription:\n\t\t\t\"Column options: nullable allows NULL, indexed creates a B-tree index, search enables full-text search\",\n\t},\n];\n\n// One-line human blurb per product surface; the tool list for each is\n// generated from the live tool registry (see buildCapabilities) so it can't\n// drift behind the actual surface.\nconst PRODUCT_BLURBS: Record<string, string> = {\n\tindex: \"decoded L2 events, transfers, contract calls, blocks, transactions\",\n\tstreams: \"bulk parquet dumps of the raw chain event firehose\",\n\tcontracts: \"trait-based contract discovery and ABIs\",\n\tsubgraphs: \"author/deploy/query custom indexes\",\n\tsubscriptions: \"webhook delivery on subgraph rows or raw chain events\",\n\taccount: \"identity and self-provisioned API keys\",\n\tscaffold: \"generate deploy-ready subgraph code from a deployed contract\",\n};\n\nconst PRODUCT_ORDER = [\n\t\"index\",\n\t\"streams\",\n\t\"contracts\",\n\t\"subgraphs\",\n\t\"subscriptions\",\n\t\"account\",\n\t\"scaffold\",\n];\n\n/**\n * \"What you can do\" overview, generated from the registered tool names so every\n * tool surfaces under its product without a hand-maintained list to fall stale.\n * Tools register (via defineTool) before registerResources runs, so the\n * registry is fully populated by the time a context read calls this.\n */\nexport function buildCapabilities() {\n\tconst byPrefix = new Map<string, string[]>();\n\tfor (const name of getRegisteredToolNames()) {\n\t\tconst prefix = name.slice(0, name.indexOf(\"_\"));\n\t\tconst tools = byPrefix.get(prefix) ?? [];\n\t\ttools.push(name);\n\t\tbyPrefix.set(prefix, tools);\n\t}\n\tconst order = [\n\t\t...PRODUCT_ORDER.filter((p) => byPrefix.has(p)),\n\t\t...[...byPrefix.keys()].filter((p) => !PRODUCT_ORDER.includes(p)),\n\t];\n\tconst products = order.map((p) => {\n\t\tconst tools = byPrefix.get(p) ?? [];\n\t\tconst blurb = PRODUCT_BLURBS[p];\n\t\treturn blurb\n\t\t\t? `${p} — ${blurb} (${tools.join(\", \")})`\n\t\t\t: `${p} (${tools.join(\", \")})`;\n\t});\n\treturn {\n\t\tproducts,\n\t\tdiscoverFirst:\n\t\t\t\"Call index_discover / contracts_find to learn what exists (and which filters each surface accepts) before querying.\",\n\t};\n}\n\n/** Pay-per-call rail — how an accountless agent buys reads past the limits. */\nconst X402_CAPABILITY = {\n\twhat: \"Index and Streams reads (/v1/index/*, /v1/streams/*) accept x402 v2 pay-per-call (network stacks:1, sponsored transfers — the payer holds sBTC/STX/USDCx, never gas). Index grants 1,000 free reads/day/IP before any 402; a paid Streams call opens a 500-call/1h PAYMENT-SESSION.\",\n\tpaidWrites:\n\t\t\"POST /v1/subgraphs (x402 $2) deploys a subgraph owned by the paying wallet — live from deploy, 7-day TTL, renewable via POST /v1/subgraphs/{name}/renew ($0.50/wk); claiming the account clears the expiry.\",\n\tprepaid:\n\t\t\"POST /v1/x402/deposit?usd=N loads a prepaid tab (PAYMENT-BALANCE token, $0.25 min) — calls debit it instantly, no per-call on-chain settle. GET /v1/x402/balance reads it.\",\n\tdiscovery:\n\t\t\"GET /v1/x402/supported on the API host for scheme, assets, prices, quotas, sessions, and prepaid metadata.\",\n\tautopay:\n\t\t\"Set X402_PRIVATE_KEY (a Stacks private key holding an accepted token) and this MCP server pays 402 challenges automatically (sessions replayed). Add X402_TOPUP_USD (and optionally X402_TOPUP_WHEN_BELOW) for an autonomous prepaid tab that refills itself. Receipts are logged per paid call.\",\n};\n\n/** Per-product read-auth tiers — what an agent must know before reading. */\nconst READ_AUTH_TIERS = {\n\tindex:\n\t\t\"anonymous reads allowed; free-tier API keys are rejected (Build+ required)\",\n\tstreams: \"API key required (SL_API_KEY) — keyless calls return 401\",\n\tsubgraphs:\n\t\t\"public subgraphs anon-readable at /v1/subgraphs/<name>/<table> ({ rows, next_cursor, tip } cursor envelope); private subgraphs need the owning account's API key (anon → 404); writes require an API key\",\n};\n\ntype ContextDeps = {\n\tclientProvider: typeof getClient;\n};\n\n/**\n * Assemble the live agent context read at connect: who you are, the live\n * Streams/Index tips, what you own (subgraphs/subscriptions), any in-flight\n * reindex operations, what the agent can do, and the read-auth tiers. The\n * snapshot comes from the SDK's `context()` (shared with non-MCP agents); each\n * field that couldn't be read becomes a sentinel string so the resource never\n * throws and always orients the agent.\n */\nexport async function buildContext(\n\tdeps: ContextDeps = { clientProvider: getClient },\n) {\n\tconst unavailable = \"unavailable: set SL_API_KEY\";\n\tconst orNull = <T>(v: T | null | undefined) => (v == null ? unavailable : v);\n\n\tconst snap = await deps\n\t\t.clientProvider()\n\t\t.context()\n\t\t.catch(() => null);\n\n\treturn {\n\t\tauthState: {\n\t\t\tapiKeySet: Boolean(process.env.SL_API_KEY),\n\t\t\tx402WalletSet: Boolean(process.env.X402_PRIVATE_KEY),\n\t\t},\n\t\twhatExists: {\n\t\t\taccount: orNull(snap?.account),\n\t\t\tstreamsTip: orNull(snap?.streamsTip),\n\t\t\tindexTip: orNull(snap?.indexTip),\n\t\t\tsubgraphs: snap?.subgraphs\n\t\t\t\t? snap.subgraphs.map(formatSubgraphSummary)\n\t\t\t\t: unavailable,\n\t\t\tsubscriptions: orNull(snap?.subscriptions),\n\t\t\tprojects: orNull(snap?.projects),\n\t\t\tapiKeys: orNull(snap?.apiKeys),\n\t\t\tactiveOperations: orNull(snap?.activeOperations),\n\t\t},\n\t\twhatYouCanDo: buildCapabilities(),\n\t\treadAuthTiers: READ_AUTH_TIERS,\n\t\tpayPerCall: X402_CAPABILITY,\n\t};\n}\n\nexport function registerResources(server: McpServer) {\n\tserver.resource(\n\t\t\"context\",\n\t\t\"secondlayer://context\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://context\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(await buildContext(), null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"filters\",\n\t\t\"secondlayer://filters\",\n\t\t{ description: \"Event filter types and their available fields\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://filters\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(FILTERS_REFERENCE, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"column-types\",\n\t\t\"secondlayer://column-types\",\n\t\t{ description: \"Subgraph column types, SQL mappings, and options\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://column-types\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(COLUMN_TYPES, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"traits\",\n\t\t\"secondlayer://traits\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"SIP trait standards the platform can classify and scaffold against — the valid values for contracts_find `trait` and subgraph scaffold `--trait`.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://traits\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttraits: TRAIT_STANDARDS.map((id) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdescription: TRAIT_BLURBS[id],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"chain-triggers\",\n\t\t\"secondlayer://chain-triggers\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers).\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://chain-triggers\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(CHAIN_TRIGGER_FIELDS, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n}\n",
7
+ "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { CHAIN_TRIGGER_FIELDS } from \"@secondlayer/shared\";\nimport { TRAIT_STANDARDS } from \"@secondlayer/stacks/clarity\";\nimport { TYPE_MAP } from \"@secondlayer/subgraphs/schema\";\nimport type { ColumnType } from \"@secondlayer/subgraphs/types\";\nimport { getClient } from \"./lib/client.ts\";\nimport { formatSubgraphSummary } from \"./lib/format.ts\";\nimport { getRegisteredToolNames } from \"./lib/tool.ts\";\n\n// SubgraphFilter vocabulary — the per-type fields an agent may set on a source\n// filter. Fields are hand-authored (the per-type breakdown lives only in the\n// SubgraphFilter interfaces), but the drift test in resources.test.ts locks the\n// type set to VALID_FILTER_TYPES and asserts every field is accepted by the\n// `.strict()` SubgraphFilterSchema, so this can never advertise a field the\n// validator rejects. `trait` (TraitScope) indexes all contracts of a standard\n// (e.g. all SIP-010 tokens). `prints` on print_event is type-level only (not a\n// runtime match field) and is intentionally omitted.\n// One-line human blurb per SIP trait standard, keyed by TRAIT_STANDARDS so a new\n// standard forces an entry here.\nconst TRAIT_BLURBS: Record<(typeof TRAIT_STANDARDS)[number], string> = {\n\t\"sip-009\": \"Non-fungible token (NFT) standard\",\n\t\"sip-010\": \"Fungible token standard\",\n\t\"sip-013\": \"Semi-fungible token standard\",\n};\n\nexport const FILTERS_REFERENCE = [\n\t{\n\t\ttype: \"stx_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"minAmount\", \"maxAmount\"],\n\t},\n\t{ type: \"stx_mint\", fields: [\"recipient\", \"minAmount\"] },\n\t{ type: \"stx_burn\", fields: [\"sender\", \"minAmount\"] },\n\t{ type: \"stx_lock\", fields: [\"lockedAddress\", \"minAmount\"] },\n\t{\n\t\ttype: \"ft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_mint\",\n\t\tfields: [\"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_burn\",\n\t\tfields: [\"sender\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"nft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"trait\"],\n\t},\n\t{ type: \"nft_mint\", fields: [\"recipient\", \"assetIdentifier\", \"trait\"] },\n\t{ type: \"nft_burn\", fields: [\"sender\", \"assetIdentifier\", \"trait\"] },\n\t{\n\t\ttype: \"contract_call\",\n\t\tfields: [\"contractId\", \"functionName\", \"caller\", \"trait\", \"abi\"],\n\t},\n\t{ type: \"contract_deploy\", fields: [\"deployer\", \"contractName\"] },\n\t{ type: \"print_event\", fields: [\"contractId\", \"topic\", \"trait\"] },\n];\n\n// Human blurb per column type, keyed by ColumnType so adding a type to the union\n// forces an entry here (the drift test in resources.test.ts asserts full coverage).\nconst COLUMN_TYPE_DESCRIPTIONS: Record<ColumnType, string> = {\n\ttext: \"UTF-8 string\",\n\tuint: \"Unsigned integer (Clarity uint) — NUMERIC for lossless 128-bit range\",\n\tint: \"Signed integer (Clarity int) — NUMERIC for lossless 128-bit range\",\n\tprincipal: \"Stacks address (standard or contract)\",\n\tboolean: \"Boolean value\",\n\ttimestamp: \"Timestamp with time zone\",\n\tjsonb: \"Arbitrary JSON data\",\n};\n\n// Derived from the subgraphs TYPE_MAP so the type→SQL mapping can't drift behind\n// the deployer (which is what actually creates the columns).\nexport const COLUMN_TYPES: Array<Record<string, unknown>> = [\n\t...(Object.keys(TYPE_MAP) as ColumnType[]).map((type) => ({\n\t\ttype,\n\t\tsqlType: TYPE_MAP[type],\n\t\tdescription: COLUMN_TYPE_DESCRIPTIONS[type],\n\t})),\n\t{\n\t\toptions: [\"nullable\", \"indexed\", \"search\"],\n\t\tdescription:\n\t\t\t\"Column options: nullable allows NULL, indexed creates a B-tree index, search enables full-text search\",\n\t},\n];\n\n// One-line human blurb per product surface; the tool list for each is\n// generated from the live tool registry (see buildCapabilities) so it can't\n// drift behind the actual surface.\nconst PRODUCT_BLURBS: Record<string, string> = {\n\tindex: \"decoded events, transfers, contract calls, blocks, transactions\",\n\tstreams: \"bulk parquet dumps of the raw chain event firehose\",\n\tcontracts: \"trait-based contract discovery and ABIs\",\n\tsubgraphs: \"author/deploy/query custom indexes\",\n\tsubscriptions: \"webhook delivery on subgraph rows or raw chain events\",\n\taccount: \"identity and self-provisioned API keys\",\n\tscaffold: \"generate deploy-ready subgraph code from a deployed contract\",\n};\n\nconst PRODUCT_ORDER = [\n\t\"index\",\n\t\"streams\",\n\t\"contracts\",\n\t\"subgraphs\",\n\t\"subscriptions\",\n\t\"account\",\n\t\"scaffold\",\n];\n\n/**\n * \"What you can do\" overview, generated from the registered tool names so every\n * tool surfaces under its product without a hand-maintained list to fall stale.\n * Tools register (via defineTool) before registerResources runs, so the\n * registry is fully populated by the time a context read calls this.\n */\nexport function buildCapabilities() {\n\tconst byPrefix = new Map<string, string[]>();\n\tfor (const name of getRegisteredToolNames()) {\n\t\tconst prefix = name.slice(0, name.indexOf(\"_\"));\n\t\tconst tools = byPrefix.get(prefix) ?? [];\n\t\ttools.push(name);\n\t\tbyPrefix.set(prefix, tools);\n\t}\n\tconst order = [\n\t\t...PRODUCT_ORDER.filter((p) => byPrefix.has(p)),\n\t\t...[...byPrefix.keys()].filter((p) => !PRODUCT_ORDER.includes(p)),\n\t];\n\tconst products = order.map((p) => {\n\t\tconst tools = byPrefix.get(p) ?? [];\n\t\tconst blurb = PRODUCT_BLURBS[p];\n\t\treturn blurb\n\t\t\t? `${p} — ${blurb} (${tools.join(\", \")})`\n\t\t\t: `${p} (${tools.join(\", \")})`;\n\t});\n\treturn {\n\t\tproducts,\n\t\tdiscoverFirst:\n\t\t\t\"Call index_discover / contracts_find to learn what exists (and which filters each surface accepts) before querying.\",\n\t};\n}\n\n/** Pay-per-call rail — how an accountless agent buys reads past the limits. */\nconst X402_CAPABILITY = {\n\twhat: \"Index and Streams reads (/v1/index/*, /v1/streams/*) accept x402 v2 pay-per-call (network stacks:1, sponsored transfers — the payer holds sBTC/STX/USDCx, never gas). Index grants 1,000 free reads/day/IP before any 402; a paid Streams call opens a 500-call/1h PAYMENT-SESSION.\",\n\tpaidWrites:\n\t\t\"POST /v1/subgraphs (x402 $2) deploys a subgraph owned by the paying wallet — live from deploy, 7-day TTL, renewable via POST /v1/subgraphs/{name}/renew ($0.50/wk); claiming the account clears the expiry.\",\n\tprepaid:\n\t\t\"POST /v1/x402/deposit?usd=N loads a prepaid tab (PAYMENT-BALANCE token, $0.25 min) — calls debit it instantly, no per-call on-chain settle. GET /v1/x402/balance reads it.\",\n\tdiscovery:\n\t\t\"GET /v1/x402/supported on the API host for scheme, assets, prices, quotas, sessions, and prepaid metadata.\",\n\tautopay:\n\t\t\"Set X402_PRIVATE_KEY (a Stacks private key holding an accepted token) and this MCP server pays 402 challenges automatically (sessions replayed). Add X402_TOPUP_USD (and optionally X402_TOPUP_WHEN_BELOW) for an autonomous prepaid tab that refills itself. Receipts are logged per paid call.\",\n};\n\n/** Per-product read-auth tiers — what an agent must know before reading. */\nconst READ_AUTH_TIERS = {\n\tindex:\n\t\t\"anonymous reads allowed; free-tier API keys are rejected (Build+ required)\",\n\tstreams: \"API key required (SL_API_KEY) — keyless calls return 401\",\n\tsubgraphs:\n\t\t\"public subgraphs anon-readable at /v1/subgraphs/<name>/<table> ({ rows, next_cursor, tip } cursor envelope); private subgraphs need the owning account's API key (anon → 404); writes require an API key\",\n};\n\ntype ContextDeps = {\n\tclientProvider: typeof getClient;\n};\n\n/**\n * Assemble the live agent context read at connect: who you are, the live\n * Streams/Index tips, what you own (subgraphs/subscriptions), any in-flight\n * reindex operations, what the agent can do, and the read-auth tiers. The\n * snapshot comes from the SDK's `context()` (shared with non-MCP agents); each\n * field that couldn't be read becomes a sentinel string so the resource never\n * throws and always orients the agent.\n */\nexport async function buildContext(\n\tdeps: ContextDeps = { clientProvider: getClient },\n) {\n\tconst unavailable = \"unavailable: set SL_API_KEY\";\n\tconst orNull = <T>(v: T | null | undefined) => (v == null ? unavailable : v);\n\n\tconst snap = await deps\n\t\t.clientProvider()\n\t\t.context()\n\t\t.catch(() => null);\n\n\treturn {\n\t\tauthState: {\n\t\t\tapiKeySet: Boolean(process.env.SL_API_KEY),\n\t\t\tx402WalletSet: Boolean(process.env.X402_PRIVATE_KEY),\n\t\t},\n\t\twhatExists: {\n\t\t\taccount: orNull(snap?.account),\n\t\t\tstreamsTip: orNull(snap?.streamsTip),\n\t\t\tindexTip: orNull(snap?.indexTip),\n\t\t\tsubgraphs: snap?.subgraphs\n\t\t\t\t? snap.subgraphs.map(formatSubgraphSummary)\n\t\t\t\t: unavailable,\n\t\t\tsubscriptions: orNull(snap?.subscriptions),\n\t\t\tprojects: orNull(snap?.projects),\n\t\t\tapiKeys: orNull(snap?.apiKeys),\n\t\t\tactiveOperations: orNull(snap?.activeOperations),\n\t\t},\n\t\twhatYouCanDo: buildCapabilities(),\n\t\treadAuthTiers: READ_AUTH_TIERS,\n\t\tpayPerCall: X402_CAPABILITY,\n\t};\n}\n\nexport function registerResources(server: McpServer) {\n\tserver.resource(\n\t\t\"context\",\n\t\t\"secondlayer://context\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://context\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(await buildContext(), null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"filters\",\n\t\t\"secondlayer://filters\",\n\t\t{ description: \"Event filter types and their available fields\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://filters\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(FILTERS_REFERENCE, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"column-types\",\n\t\t\"secondlayer://column-types\",\n\t\t{ description: \"Subgraph column types, SQL mappings, and options\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://column-types\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(COLUMN_TYPES, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"traits\",\n\t\t\"secondlayer://traits\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"SIP trait standards the platform can classify and scaffold against — the valid values for contracts_find `trait` and subgraph scaffold `--trait`.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://traits\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttraits: TRAIT_STANDARDS.map((id) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdescription: TRAIT_BLURBS[id],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"chain-triggers\",\n\t\t\"secondlayer://chain-triggers\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers).\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://chain-triggers\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(CHAIN_TRIGGER_FIELDS, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n}\n",
8
8
  "import { SecondLayer, readX402Receipt, withX402 } from \"@secondlayer/sdk\";\nimport { privateKeyToAccount } from \"@secondlayer/stacks/accounts\";\n\nlet instance: SecondLayer | null = null;\n\n/**\n * Read the API key from env. `SL_API_KEY` is the single credential var, matching\n * the CLI and SDK. (The former `SL_SERVICE_KEY` / `SECONDLAYER_API_KEY` aliases\n * were removed.)\n */\nfunction readApiKey(): string | undefined {\n\treturn process.env.SL_API_KEY;\n}\n\n/**\n * Lazy SDK singleton. Built keyless when no key is set so read tools (list,\n * get, query, spec) work during open beta — reads are public. Write tools\n * (deploy/reindex/delete) and account tools hit the API without a key and get\n * a 401, surfaced with a key hint via `keyHint` below.\n */\n/**\n * When `X402_PRIVATE_KEY` is set (a Stacks key holding an accepted token),\n * wrap fetch so 402 challenges on paid surfaces are paid automatically —\n * sponsored transfers, so the wallet never needs STX for gas. Each paid\n * call logs its settlement receipt to stderr (stdio-transport safe).\n */\nfunction buildFetchImpl(): typeof fetch | undefined {\n\tconst key = process.env.X402_PRIVATE_KEY;\n\tif (!key) return undefined;\n\tconst account = privateKeyToAccount(key);\n\t// Optional treasury policy: deposit X402_TOPUP_USD whenever the prepaid\n\t// tab drops below X402_TOPUP_WHEN_BELOW (defaults $0.50). Without it,\n\t// every paid call settles individually.\n\tconst topUpUsd = Number(process.env.X402_TOPUP_USD ?? \"\");\n\tconst paid = withX402(fetch, {\n\t\taccount,\n\t\t...(Number.isFinite(topUpUsd) && topUpUsd > 0\n\t\t\t? {\n\t\t\t\t\ttopUp: {\n\t\t\t\t\t\tusd: topUpUsd,\n\t\t\t\t\t\twhenBelow: Number(process.env.X402_TOPUP_WHEN_BELOW ?? \"0.5\"),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tconst wrapped = async (input: string | URL, init?: RequestInit) => {\n\t\tconst res = await paid(input, init);\n\t\tconst receipt = readX402Receipt(res);\n\t\tif (receipt) {\n\t\t\tconsole.error(\n\t\t\t\t`[x402] paid call settled tier=${receipt.state ?? \"confirmed\"} txid=${receipt.txid}`,\n\t\t\t);\n\t\t}\n\t\treturn res;\n\t};\n\t// SecondLayer only ever calls fetchImpl(url, init); Bun's `typeof fetch`\n\t// additionally carries `preconnect`, hence the cast.\n\treturn wrapped as unknown as typeof fetch;\n}\n\nexport function getClient(): SecondLayer {\n\tif (!instance) {\n\t\tconst apiKey = readApiKey();\n\t\tconst baseUrl = process.env.SECONDLAYER_API_URL;\n\t\tconst dumpsBaseUrl = process.env.SL_STREAMS_DUMPS_URL;\n\t\tconst fetchImpl = buildFetchImpl();\n\t\tinstance = new SecondLayer({\n\t\t\t...(apiKey ? { apiKey } : {}),\n\t\t\torigin: \"mcp\",\n\t\t\t...(baseUrl ? { baseUrl } : {}),\n\t\t\t...(dumpsBaseUrl ? { dumpsBaseUrl } : {}),\n\t\t\t...(fetchImpl ? { fetchImpl } : {}),\n\t\t});\n\t}\n\treturn instance;\n}\n\n// Appended to 401/403 errors raised on keyless requests — the operation needs\n// a write/account key, so point at where to get one.\nexport const keyHint =\n\t\" — set SL_API_KEY to an sk-sl_ API key from \" +\n\t\"https://secondlayer.tools/platform/api-keys for write and account operations\";\n\n/** Raw fetch helper for API endpoints not covered by the SDK. */\nexport async function apiRequest<T>(\n\tmethod: string,\n\tpath: string,\n\tbody?: unknown,\n): Promise<T> {\n\tconst apiKey = readApiKey();\n\tconst baseUrl =\n\t\tprocess.env.SECONDLAYER_API_URL || \"https://api.secondlayer.tools\";\n\tconst res = await fetch(`${baseUrl}${path}`, {\n\t\tmethod,\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t},\n\t\tbody: body ? JSON.stringify(body) : undefined,\n\t});\n\tif (!res.ok) {\n\t\tconst text = await res.text().catch(() => \"\");\n\t\tconst needsKey = !apiKey && (res.status === 401 || res.status === 403);\n\t\tthrow Object.assign(\n\t\t\tnew Error((text || `HTTP ${res.status}`) + (needsKey ? keyHint : \"\")),\n\t\t\t{ status: res.status },\n\t\t);\n\t}\n\tif (res.status === 204) return undefined as T;\n\treturn res.json() as Promise<T>;\n}\n",
9
9
  "/** Summarize a subgraph for list responses. */\nexport function formatSubgraphSummary(s: {\n\tname: string;\n\tstatus: string;\n\ttables: string[] | Record<string, unknown>;\n\tlastProcessedBlock: number;\n\tvisibility?: \"public\" | \"private\";\n}) {\n\tconst apiUrl =\n\t\tprocess.env.SECONDLAYER_API_URL || \"https://api.secondlayer.tools\";\n\treturn {\n\t\tname: s.name,\n\t\tstatus: s.status,\n\t\ttables: Array.isArray(s.tables) ? s.tables : Object.keys(s.tables),\n\t\tlastProcessedBlock: s.lastProcessedBlock,\n\t\t...(s.visibility ? { visibility: s.visibility } : {}),\n\t\t// Public subgraphs are anon-readable — surface the shareable /v1 URL.\n\t\t...(s.visibility === \"public\"\n\t\t\t? { publicUrl: `${apiUrl}/v1/subgraphs/${s.name}` }\n\t\t\t: {}),\n\t};\n}\n\n/** Cap array length and return truncation metadata. */\nexport function withCap<T>(\n\titems: T[],\n\tcap: number,\n): { items: T[]; truncated: boolean; total: number } {\n\treturn {\n\t\titems: items.slice(0, cap),\n\t\ttruncated: items.length > cap,\n\t\ttotal: items.length,\n\t};\n}\n\n/** Build MCP text response with JSON-serialized payload. */\nexport function jsonResponse(\n\tdata: unknown,\n\tisError?: boolean,\n): { content: Array<{ type: \"text\"; text: string }>; isError?: boolean } {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n\t\t...(isError && { isError: true }),\n\t};\n}\n\n/** Build MCP text response with plain text payload. */\nexport function textResponse(\n\ttext: string,\n\tisError?: boolean,\n): { content: Array<{ type: \"text\"; text: string }>; isError?: boolean } {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError && { isError: true }),\n\t};\n}\n",
10
10
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\ninterface ToolResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tisError?: boolean;\n}\n\n// Names of every tool registered via defineTool, in registration order. The\n// context resource generates its capability list from this so CAPABILITIES can\n// never drift behind the actual tool surface (a new tool auto-appears). A Set\n// dedupes across repeated createServer() calls in tests.\nconst registeredToolNames = new Set<string>();\n\n/** Tool names registered so far this process (see {@link defineTool}). */\nexport function getRegisteredToolNames(): string[] {\n\treturn [...registeredToolNames];\n}\n\n/**\n * Type-safe wrapper around McpServer.tool() that avoids TS2589.\n *\n * The MCP SDK's Zod-generic `tool()` signature recurses past TypeScript's\n * instantiation depth limit when schemas contain discriminated unions or\n * nested optionals. This helper isolates the boundary cast to one place\n * so tool files stay fully typed via the explicit `T` generic.\n *\n * Schema is typed as Record<string, unknown> to prevent TypeScript from\n * resolving the deeply recursive ZodRawShapeCompat constraint. Zod still\n * validates at runtime.\n */\nexport function defineTool<T>(\n\tserver: McpServer,\n\tname: string,\n\tdescription: string,\n\tschema: Record<string, unknown>,\n\thandler: (args: T) => Promise<ToolResult> | ToolResult,\n): void {\n\tconst wrappedHandler = async (args: T): Promise<ToolResult> => {\n\t\ttry {\n\t\t\treturn await handler(args);\n\t\t} catch (err: unknown) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tconst status =\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\t\terr instanceof Error && \"status\" in err ? (err as any).status : 0;\n\t\t\tconst type =\n\t\t\t\tstatus === 401\n\t\t\t\t\t? \"unauthorized\"\n\t\t\t\t\t: status === 404\n\t\t\t\t\t\t? \"not_found\"\n\t\t\t\t\t\t: status === 429\n\t\t\t\t\t\t\t? \"rate_limited\"\n\t\t\t\t\t\t\t: status >= 500\n\t\t\t\t\t\t\t\t? \"server_error\"\n\t\t\t\t\t\t\t\t: \"error\";\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify({ error: { type, status, message } }),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t}\n\t};\n\tregisteredToolNames.add(name);\n\t(server.tool as (...args: unknown[]) => unknown)(\n\t\tname,\n\t\tdescription,\n\t\tschema,\n\t\twrappedHandler,\n\t);\n}\n",
11
11
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod/v4\";\nimport { apiRequest, getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\nexport function registerAccountTools(server: McpServer) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"account_whoami\",\n\t\t\"Show the authenticated account's email and plan.\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst result = await apiRequest<{ email: string; plan: string }>(\n\t\t\t\t\"GET\",\n\t\t\t\t\"/api/accounts/me\",\n\t\t\t);\n\t\t\treturn jsonResponse(result);\n\t\t},\n\t);\n\n\tdefineTool<{ product?: \"streams\" | \"index\"; name?: string }>(\n\t\tserver,\n\t\t\"account_create_key\",\n\t\t\"Mint a scoped streams/index read API key so the agent can self-provision access. Requires an account-level (owner) API key. The returned `key` is shown ONCE — forward it to the user to set as SL_API_KEY.\",\n\t\t{\n\t\t\tproduct: z\n\t\t\t\t.enum([\"streams\", \"index\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Key scope (default streams)\"),\n\t\t\tname: z.string().optional().describe(\"Optional label for the key\"),\n\t\t},\n\t\tasync ({ product, name }) =>\n\t\t\tjsonResponse(await getClient().apiKeys.create({ product, name })),\n\t);\n}\n",
12
12
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nexport function registerContractTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\ttrait: string;\n\t\tconformance?: \"declared\" | \"inferred\" | \"any\";\n\t\tinclude?: \"abi\";\n\t\tlimit?: number;\n\t\tcursor?: string;\n\t}>(\n\t\tserver,\n\t\t\"contracts_find\",\n\t\t'Discover deployed Stacks contracts conforming to a trait (e.g. \"sip-010\", \"sip-009\", \"sip-013\"). The discovery endpoint for \"which contracts implement X\". Reads are public.',\n\t\t{\n\t\t\ttrait: z.string().describe('Required. Trait to match (e.g. \"sip-010\").'),\n\t\t\tconformance: z\n\t\t\t\t.enum([\"declared\", \"inferred\", \"any\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"declared = parsed from source, inferred = ABI shape-match, any = either (default)\",\n\t\t\t\t),\n\t\t\tinclude: z\n\t\t\t\t.literal(\"abi\")\n\t\t\t\t.optional()\n\t\t\t\t.describe('Set to \"abi\" to include each contract\\'s full ABI'),\n\t\t\tlimit: z.number().optional().describe(\"Page size, 1–500 (default 100)\"),\n\t\t\tcursor: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().contracts.list(params)),\n\t);\n\n\tdefineTool<{ contractId: string }>(\n\t\tserver,\n\t\t\"get_contract_abi\",\n\t\t\"Fetch a single deployed contract's ABI from the registry (prod-safe). Returns the contract's metadata + full ABI (functions, maps, variables, fungible/non-fungible tokens). Returns not_found if the contract isn't in the registry. Use it to inspect a contract before scaffold_from_contract.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"Fully qualified contract id (e.g. SP….amm-pool-v2-01)\"),\n\t\t},\n\t\tasync ({ contractId }) => {\n\t\t\tconst contract = await clientProvider().contracts.get(contractId, {\n\t\t\t\tincludeAbi: true,\n\t\t\t});\n\t\t\treturn contract\n\t\t\t\t? jsonResponse(contract)\n\t\t\t\t: jsonResponse(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\ttype: \"not_found\",\n\t\t\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\t\t\tmessage: `Contract not in registry: ${contractId}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t},\n\t);\n\n}\n",
13
- "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { DECODED_EVENT_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nconst INDEX_EVENT_TYPES = DECODED_EVENT_TYPES;\n\n/** Filters shared by the height/cursor-paginated Index endpoints. */\nconst rangeFilters = {\n\tcontractId: z.string().optional().describe(\"Filter by contract id\"),\n\tfromHeight: z.number().optional().describe(\"Start block height (inclusive)\"),\n\ttoHeight: z.number().optional().describe(\"End block height (inclusive)\"),\n\tcursor: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\tlimit: z.number().optional().describe(\"Max rows for this page\"),\n};\n\n/** Height-range subset for endpoints that don't filter by contract (blocks). */\nconst heightFilters = {\n\tfromHeight: rangeFilters.fromHeight,\n\ttoHeight: rangeFilters.toHeight,\n\tcursor: rangeFilters.cursor,\n\tlimit: rangeFilters.limit,\n};\n\nexport function registerIndexTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_ft_transfers\",\n\t\t\"List decoded SIP-010 fungible-token transfers from the Index (L2 decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.ftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_nft_transfers\",\n\t\t\"List decoded SIP-009 non-fungible-token transfers from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier (contract::asset)\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.nftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\teventType: (typeof INDEX_EVENT_TYPES)[number];\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_events\",\n\t\t\"List decoded chain events from the Index by event type. Use this for event types without a dedicated tool (stx_*, ft_mint/burn, nft_mint/burn, print), and for trait-scoped queries: set `trait` (e.g. sip-010) to match all contracts conforming to a standard — pair with contracts_find to discover traits. For ft/nft transfers without a trait prefer index_ft_transfers / index_nft_transfers.\",\n\t\t{\n\t\t\teventType: z\n\t\t\t\t.enum(INDEX_EVENT_TYPES)\n\t\t\t\t.describe(\"Required. Decoded event type to list.\"),\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier where applicable\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId; contract-keyed event types only.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.events.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tfunctionName?: string;\n\t\tsender?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_contract_calls\",\n\t\t\"List decoded contract calls from the Index (function name, args, result). Set `trait` (e.g. sip-010) to match calls to all contracts conforming to a standard. Note: contract-call cursors are a SEPARATE keyspace from event cursors — they are not interchangeable.\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tfunctionName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by called function name\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by caller principal\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.contractCalls.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_blocks\",\n\t\t\"List decoded blocks from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{ ...heightFilters },\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.blocks.list(params)),\n\t);\n\n\tdefineTool<{\n\t\ttype?: string;\n\t\tsender?: string;\n\t\tcontractId?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_transactions\",\n\t\t\"List decoded transactions from the Index. Filter by type, sender, or contract. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\ttype: z.string().optional().describe(\"Filter by transaction type\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.transactions.list(params)),\n\t);\n\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"index_discover\",\n\t\t\"Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().index.discover()),\n\t);\n\n\tdefineTool<{\n\t\trequests: Array<{ path: string; params?: Record<string, string> }>;\n\t}>(\n\t\tserver,\n\t\t\"batch_query\",\n\t\t\"Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.\",\n\t\t{\n\t\t\trequests: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tpath: z.string().describe(\"Public /v1 read path\"),\n\t\t\t\t\t\tparams: z.record(z.string(), z.string()).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.min(1)\n\t\t\t\t.max(10)\n\t\t\t\t.describe(\"Read descriptors, executed concurrently\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().batch(params.requests)),\n\t);\n}\n",
13
+ "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { DECODED_EVENT_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nconst INDEX_EVENT_TYPES = DECODED_EVENT_TYPES;\n\n/** Filters shared by the height/cursor-paginated Index endpoints. */\nconst rangeFilters = {\n\tcontractId: z.string().optional().describe(\"Filter by contract id\"),\n\tfromHeight: z.number().optional().describe(\"Start block height (inclusive)\"),\n\ttoHeight: z.number().optional().describe(\"End block height (inclusive)\"),\n\tcursor: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\tlimit: z.number().optional().describe(\"Max rows for this page\"),\n};\n\n/** Height-range subset for endpoints that don't filter by contract (blocks). */\nconst heightFilters = {\n\tfromHeight: rangeFilters.fromHeight,\n\ttoHeight: rangeFilters.toHeight,\n\tcursor: rangeFilters.cursor,\n\tlimit: rangeFilters.limit,\n};\n\nexport function registerIndexTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_ft_transfers\",\n\t\t\"List decoded SIP-010 fungible-token transfers from the Index (decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.ftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_nft_transfers\",\n\t\t\"List decoded SIP-009 non-fungible-token transfers from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier (contract::asset)\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.nftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\teventType: (typeof INDEX_EVENT_TYPES)[number];\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_events\",\n\t\t\"List decoded chain events from the Index by event type. Use this for event types without a dedicated tool (stx_*, ft_mint/burn, nft_mint/burn, print), and for trait-scoped queries: set `trait` (e.g. sip-010) to match all contracts conforming to a standard — pair with contracts_find to discover traits. For ft/nft transfers without a trait prefer index_ft_transfers / index_nft_transfers.\",\n\t\t{\n\t\t\teventType: z\n\t\t\t\t.enum(INDEX_EVENT_TYPES)\n\t\t\t\t.describe(\"Required. Decoded event type to list.\"),\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier where applicable\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId; contract-keyed event types only.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.events.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tfunctionName?: string;\n\t\tsender?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_contract_calls\",\n\t\t\"List decoded contract calls from the Index (function name, args, result). Set `trait` (e.g. sip-010) to match calls to all contracts conforming to a standard. Note: contract-call cursors are a SEPARATE keyspace from event cursors — they are not interchangeable.\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tfunctionName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by called function name\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by caller principal\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.contractCalls.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_blocks\",\n\t\t\"List decoded blocks from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{ ...heightFilters },\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.blocks.list(params)),\n\t);\n\n\tdefineTool<{\n\t\ttype?: string;\n\t\tsender?: string;\n\t\tcontractId?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_transactions\",\n\t\t\"List decoded transactions from the Index. Filter by type, sender, or contract. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\ttype: z.string().optional().describe(\"Filter by transaction type\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.transactions.list(params)),\n\t);\n\n\tdefineTool<{ contractId: string }>(\n\t\tserver,\n\t\t\"index_print_schema\",\n\t\t\"Empirical per-topic print payload schemas for a contract, inferred from sampled on-chain events: each topic's fields with observed Clarity types, decoded TS types, subgraph column types, and presence rates. Use before writing print_event subgraph handlers to learn what's on e.data. Anonymous read.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"Contract id (SP….name) whose print events to profile\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.printSchema(params.contractId)),\n\t);\n\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"index_discover\",\n\t\t\"Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().index.discover()),\n\t);\n\n\tdefineTool<{\n\t\trequests: Array<{ path: string; params?: Record<string, string> }>;\n\t}>(\n\t\tserver,\n\t\t\"batch_query\",\n\t\t\"Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.\",\n\t\t{\n\t\t\trequests: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tpath: z.string().describe(\"Public /v1 read path\"),\n\t\t\t\t\t\tparams: z.record(z.string(), z.string()).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.min(1)\n\t\t\t\t.max(10)\n\t\t\t\t.describe(\"Read descriptors, executed concurrently\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().batch(params.requests)),\n\t);\n}\n",
14
14
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { generateSubgraphCode } from \"@secondlayer/scaffold\";\nimport type { AbiFunction, AbiMap } from \"@secondlayer/scaffold\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\n// Source ABIs from the platform contract registry (prod-safe). The old\n// `/api/node/contracts/:id/abi` proxy is OSS/dedicated-only and 404s in prod.\nasync function fetchAbi(\n\tclientProvider: ClientProvider,\n\tcontractId: string,\n): Promise<{ functions: AbiFunction[]; maps: AbiMap[] }> {\n\tconst contract = await clientProvider().contracts.get(contractId, {\n\t\tincludeAbi: true,\n\t});\n\tif (!contract) throw new Error(`Contract not found: ${contractId}`);\n\tconst abi = contract.abi as {\n\t\tfunctions?: AbiFunction[];\n\t\tmaps?: AbiMap[];\n\t} | null;\n\tif (!abi) {\n\t\tthrow new Error(\n\t\t\t`No ABI available for ${contractId} (abi_status: ${contract.abi_status})`,\n\t\t);\n\t}\n\treturn { functions: abi.functions ?? [], maps: abi.maps ?? [] };\n}\n\nexport function registerScaffoldTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{ contractId: string; subgraphName?: string }>(\n\t\tserver,\n\t\t\"scaffold_from_contract\",\n\t\t\"Generate a subgraph scaffold from a deployed Stacks contract. Fetches the ABI automatically.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Fully qualified contract ID (e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01)\",\n\t\t\t\t),\n\t\t\tsubgraphName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Override the subgraph name (defaults to contract name)\"),\n\t\t},\n\t\tasync ({ contractId, subgraphName }) => {\n\t\t\tconst { functions, maps } = await fetchAbi(clientProvider, contractId);\n\t\t\tconst code = generateSubgraphCode(\n\t\t\t\tcontractId,\n\t\t\t\tfunctions,\n\t\t\t\tsubgraphName,\n\t\t\t\tmaps,\n\t\t\t);\n\t\t\treturn { content: [{ type: \"text\", text: code }] };\n\t\t},\n\t);\n}\n",
15
15
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nexport function registerStreamsTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"streams_dumps\",\n\t\t\"List the Streams bulk parquet dumps manifest — coverage range, latest_finalized_cursor, and per-file metadata (block range, row count, size, sha256, signed URL). This is the cold backfill path for downloading all raw data; fetch the file URLs directly (e.g. with DuckDB). Requires the dumps base URL to be configured (SL_STREAMS_DUMPS_URL). Live Streams reads (tip, events, consume) are REST-only: see /v1/streams/* in the OpenAPI spec.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().streams.dumps.list()),\n\t);\n}\n",
16
16
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { bundleSubgraphCode } from \"@secondlayer/bundler\";\nimport { ByoBreakingChangeError } from \"@secondlayer/sdk\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { formatSubgraphSummary, withCap } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype SubgraphClientProvider = typeof getClient;\n\nexport function registerSubgraphTools(\n\tserver: McpServer,\n\tclientProvider: SubgraphClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"subgraphs_list\",\n\t\t\"List all deployed subgraphs. Returns summary fields only, including visibility — public subgraphs are anon-readable at /v1/subgraphs/<name>.\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst { data } = await clientProvider().subgraphs.list();\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify(data.map(formatSubgraphSummary), null, 2),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_get\",\n\t\t\"Get full details of a subgraph including schema, health, and table columns.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst detail = await clientProvider().subgraphs.get(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(detail, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\ttable: string;\n\t\tfilters?: Record<string, string>;\n\t\tsort?: string;\n\t\torder?: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tfields?: string;\n\t\tcount?: boolean;\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_query\",\n\t\t'Query rows from a subgraph table (max 200 rows). Filters support operators: \"amount.gte\": \"1000\", \"sender.neq\": \"SP...\", \"name.like\": \"%token%\". Available operators: eq, neq, gt, gte, lt, lte, like. To TAIL new rows (no streaming over MCP): sort=_id, order=desc for the latest, then poll forward with the filter {\"_id.gt\": \"<last _id seen>\"}, order=asc. Fetch one row by id with {\"_id\": \"<id>\"}. Public subgraphs are also keyless over HTTP at GET /v1/subgraphs/<name>/<table> — { rows, next_cursor, tip } envelope, resume with ?cursor=<next_cursor> + _order=asc|desc (no _offset/_sort on /v1); hand that URL to third parties.',\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\ttable: z.string().describe(\"Table name\"),\n\t\t\tfilters: z\n\t\t\t\t.record(z.string(), z.string())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Column filters — plain values or with operators (e.g. {\"amount.gte\": \"1000\", \"sender\": \"SP...\"})',\n\t\t\t\t),\n\t\t\tsort: z.string().optional().describe(\"Column to sort by\"),\n\t\t\torder: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort order\"),\n\t\t\tlimit: z\n\t\t\t\t.number()\n\t\t\t\t.max(200)\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Max rows (default 50, max 200)\"),\n\t\t\toffset: z.number().optional().describe(\"Offset for pagination\"),\n\t\t\tfields: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Comma-separated column list to return (e.g. \"sender,amount\")',\n\t\t\t\t),\n\t\t\tcount: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"If true, return row count instead of rows\"),\n\t\t},\n\t\tasync ({\n\t\t\tname,\n\t\t\ttable,\n\t\t\tfilters,\n\t\t\tsort,\n\t\t\torder,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tfields,\n\t\t\tcount,\n\t\t}) => {\n\t\t\tif (count) {\n\t\t\t\tconst result = await clientProvider().subgraphs.queryTableCount(\n\t\t\t\t\tname,\n\t\t\t\t\ttable,\n\t\t\t\t\t{ filters, sort, order },\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rows = await clientProvider().subgraphs.queryTable(name, table, {\n\t\t\t\tfilters,\n\t\t\t\tsort,\n\t\t\t\torder,\n\t\t\t\tlimit: limit ?? 50,\n\t\t\t\toffset,\n\t\t\t\tfields,\n\t\t\t});\n\t\t\tconst cap = limit ?? 50;\n\t\t\tconst result = withCap(\n\t\t\t\trows as Record<string, unknown>[],\n\t\t\t\tcap > 200 ? 200 : cap,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string; fromBlock?: number; toBlock?: number }>(\n\t\tserver,\n\t\t\"subgraphs_reindex\",\n\t\t\"Reindex a subgraph from a specific block range. Returns an operationId — check subgraphs_get (health) or the REST operations endpoint to track progress to completion.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tfromBlock: z\n\t\t\t\t.number()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Start block (defaults to beginning)\"),\n\t\t\ttoBlock: z.number().optional().describe(\"End block (defaults to latest)\"),\n\t\t},\n\t\tasync ({ name, fromBlock, toBlock }) => {\n\t\t\tconst result = await clientProvider().subgraphs.reindex(name, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string; fromBlock: number; toBlock: number }>(\n\t\tserver,\n\t\t\"subgraphs_backfill\",\n\t\t\"Backfill a subgraph over a block range. Non-destructive forward fill (does not drop existing data) — unlike subgraphs_reindex, and the only data-fill path for BYO subgraphs (reindex is blocked there). Both blocks required. Returns an operationId — check subgraphs_get (health) or the REST operations endpoint to track progress.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tfromBlock: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.describe(\"Start block (inclusive)\"),\n\t\t\ttoBlock: z.number().int().nonnegative().describe(\"End block (inclusive)\"),\n\t\t},\n\t\tasync ({ name, fromBlock, toBlock }) => {\n\t\t\tconst result = await clientProvider().subgraphs.backfill(name, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_stop\",\n\t\t\"Cancel an in-flight reindex or backfill operation for a subgraph. Returns the stop request status; check subgraphs_get (health) or the REST operations endpoint to confirm it reaches a terminal state.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.stop(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tresolved?: boolean;\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_gaps\",\n\t\t\"List indexing gaps (missing block ranges) for a subgraph. Each gap reports start/end/size, reason, and detected/resolved timestamps. Feed an unresolved gap's range into subgraphs_backfill to fill it. Defaults to unresolved gaps.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tlimit: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.positive()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Max gaps to return\"),\n\t\t\toffset: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Pagination offset\"),\n\t\t\tresolved: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by resolved state (omit for unresolved only)\"),\n\t\t},\n\t\tasync ({ name, limit, offset, resolved }) => {\n\t\t\tconst result = await clientProvider().subgraphs.gaps(name, {\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\tresolved,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_delete\",\n\t\t\"Delete a subgraph permanently.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.delete(name);\n\t\t\treturn { content: [{ type: \"text\", text: result.message }] };\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tcode: string;\n\t\tstartBlock?: number;\n\t\tdatabaseUrl?: string;\n\t\tdryRun?: boolean;\n\t\tvisibility?: \"public\" | \"private\";\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_deploy\",\n\t\t\"Deploy a subgraph from TypeScript code. Pass the full defineSubgraph() source — it will be bundled, validated, and deployed. Optional startBlock overrides the source definition for this deploy. Set dryRun to validate and preview the schema/DDL without writing anything. Set databaseUrl to deploy to your own Postgres (BYO data plane) — the server verifies the connection first; with dryRun it returns the DDL + grant script. A breaking BYO schema change is refused and returns a migration plan (drop + rebuild DDL) instead of deploying. Visibility defaults: managed deploys are public (anon-readable at /v1/subgraphs/<name>, name claimed in the global public namespace), BYO deploys are private. Call `subgraphs_reindex` separately if you need a forced reindex.\",\n\t\t{\n\t\t\tcode: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"TypeScript source code containing a defineSubgraph() call\"),\n\t\t\tstartBlock: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Override the definition startBlock for this deploy\"),\n\t\t\tdatabaseUrl: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"BYO data plane: Postgres connection string to host the subgraph's schema and rows in your own database\",\n\t\t\t\t),\n\t\t\tdryRun: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Validate and preview the deploy (schema/DDL, BYO connection) without writing changes\",\n\t\t\t\t),\n\t\t\tvisibility: z\n\t\t\t\t.enum([\"public\", \"private\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Read visibility: public = anon /v1 reads + global name claim; private = owning account's key only. Defaults: managed → public, BYO → private.\",\n\t\t\t\t),\n\t\t},\n\t\tasync ({ code, startBlock, databaseUrl, dryRun, visibility }) => {\n\t\t\tconst bundled = await bundleSubgraphCode(code);\n\t\t\ttry {\n\t\t\t\tconst result = await clientProvider().subgraphs.deploy({\n\t\t\t\t\tname: bundled.name,\n\t\t\t\t\tversion: bundled.version,\n\t\t\t\t\tdescription: bundled.description,\n\t\t\t\t\tsources: bundled.sources,\n\t\t\t\t\tschema: bundled.schema,\n\t\t\t\t\thandlerCode: bundled.handlerCode,\n\t\t\t\t\tsourceCode: code,\n\t\t\t\t\t...(startBlock !== undefined ? { startBlock } : {}),\n\t\t\t\t\t...(databaseUrl !== undefined ? { databaseUrl } : {}),\n\t\t\t\t\t...(dryRun !== undefined ? { dryRun } : {}),\n\t\t\t\t\t...(visibility !== undefined ? { visibility } : {}),\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t\t};\n\t\t\t} catch (err) {\n\t\t\t\t// A refused BYO breaking change is an actionable result, not a failure:\n\t\t\t\t// defineTool would flatten the throw to {error:{message}} and drop the\n\t\t\t\t// migration plan, so surface reasons/diff/plan as a normal result.\n\t\t\t\tif (err instanceof ByoBreakingChangeError) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t\t\t{ byoBreakingChange: true, ...err.details },\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_publish\",\n\t\t\"Make a subgraph publicly readable at /v1/subgraphs/<name> — anyone (or any agent) can read it without a key. Claims the name in the global public namespace; fails with PUBLIC_NAME_TAKEN if another account holds it.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.publish(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_unpublish\",\n\t\t\"Make a subgraph private again — /v1 reads then require the owning account's bearer key, and the global public name claim is released.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.unpublish(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n}\n",
17
17
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type {\n\tChainTrigger,\n\tCreateSubscriptionRequest,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/sdk\";\nimport { CHAIN_TRIGGER_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype SubscriptionClientProvider = typeof getClient;\n\n/**\n * Subscription MCP tools — let agents list, configure, test, and replay\n * subgraph event subscriptions. Mirrors the HTTP API 1:1; structured\n * errors bubble through the SDK's ApiError.\n */\nexport function registerSubscriptionTools(\n\tserver: McpServer,\n\tclientProvider: SubscriptionClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"subscriptions_list\",\n\t\t\"List all subscriptions for the current account. Returns summary fields (no secrets).\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst { data } = await clientProvider().subscriptions.list();\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_get\",\n\t\t\"Get full detail for a subscription (filter, auth, retry config, circuit state).\",\n\t\t{ id: z.string().describe(\"Subscription id\") },\n\t\tasync ({ id }) => {\n\t\t\tconst detail = await clientProvider().subscriptions.get(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(detail, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\tsubgraphName?: string;\n\t\ttableName?: string;\n\t\ttriggers?: ChainTrigger[];\n\t\turl: string;\n\t\tformat?:\n\t\t\t| \"standard-webhooks\"\n\t\t\t| \"inngest\"\n\t\t\t| \"trigger\"\n\t\t\t| \"cloudflare\"\n\t\t\t| \"cloudevents\"\n\t\t\t| \"raw\";\n\t\truntime?: \"inngest\" | \"trigger\" | \"cloudflare\" | \"node\";\n\t\tfilter?: Record<string, unknown>;\n\t\tauthConfig?: Record<string, unknown>;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_create\",\n\t\t\"Create a subscription. Two kinds (mutually exclusive): a SUBGRAPH subscription fires on a subgraph table's rows (set subgraphName + tableName + optional filter); a CHAIN subscription fires on raw chain events with no subgraph (set triggers). Returns `signingSecret` ONCE — forward it to the user so they can wire it into their receiver.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Human-readable name, unique per account\"),\n\t\t\tsubgraphName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Subgraph to subscribe to (subgraph subscription)\"),\n\t\t\ttableName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Table within the subgraph (subgraph subscription)\"),\n\t\t\ttriggers: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\ttype: z.enum(CHAIN_TRIGGER_TYPES),\n\t\t\t\t\t\tcontractId: z.string().optional(),\n\t\t\t\t\t\tfunctionName: z.string().optional(),\n\t\t\t\t\t\tcaller: z.string().optional(),\n\t\t\t\t\t\tsender: z.string().optional(),\n\t\t\t\t\t\trecipient: z.string().optional(),\n\t\t\t\t\t\tassetIdentifier: z.string().optional(),\n\t\t\t\t\t\tdeployer: z.string().optional(),\n\t\t\t\t\t\tcontractName: z.string().optional(),\n\t\t\t\t\t\ttopic: z.string().optional(),\n\t\t\t\t\t\tlockedAddress: z.string().optional(),\n\t\t\t\t\t\ttrait: z.string().optional(),\n\t\t\t\t\t\tminAmount: z.union([z.string(), z.number()]).optional(),\n\t\t\t\t\t\tmaxAmount: z.union([z.string(), z.number()]).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Chain triggers (chain subscription) — provide INSTEAD of subgraphName/tableName. Each targets a raw chain event/tx; string fields accept `*` wildcards, `trait` scopes to a SIP/trait. Per-type accepted fields: see the secondlayer://chain-triggers resource. Forward-looking: starts at chain tip, no backfill.\",\n\t\t\t\t),\n\t\t\turl: z.string().describe(\"Webhook URL\"),\n\t\t\tformat: z\n\t\t\t\t.enum([\n\t\t\t\t\t\"standard-webhooks\",\n\t\t\t\t\t\"inngest\",\n\t\t\t\t\t\"trigger\",\n\t\t\t\t\t\"cloudflare\",\n\t\t\t\t\t\"cloudevents\",\n\t\t\t\t\t\"raw\",\n\t\t\t\t])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Wire format (default standard-webhooks)\"),\n\t\t\truntime: z\n\t\t\t\t.enum([\"inngest\", \"trigger\", \"cloudflare\", \"node\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Receiver runtime label (display only)\"),\n\t\t\tfilter: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Scalar filter DSL, e.g. {\"amount\": {\"gte\": 100}, \"sender\": \"SP...\"}',\n\t\t\t\t),\n\t\t\tauthConfig: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Receiver auth sent with each delivery, e.g. {\"type\": \"bearer\", \"token\": \"...\"}',\n\t\t\t\t),\n\t\t},\n\t\tasync (input) => {\n\t\t\tconst res = await clientProvider().subscriptions.create(\n\t\t\t\tinput as CreateSubscriptionRequest,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tid: string;\n\t\tname?: string;\n\t\turl?: string;\n\t\tfilter?: Record<string, unknown>;\n\t\tauthConfig?: Record<string, unknown>;\n\t\tformat?:\n\t\t\t| \"standard-webhooks\"\n\t\t\t| \"inngest\"\n\t\t\t| \"trigger\"\n\t\t\t| \"cloudflare\"\n\t\t\t| \"cloudevents\"\n\t\t\t| \"raw\";\n\t\truntime?: \"inngest\" | \"trigger\" | \"cloudflare\" | \"node\" | null;\n\t\tmaxRetries?: number;\n\t\ttimeoutMs?: number;\n\t\tconcurrency?: number;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_update\",\n\t\t\"Patch a subscription (name, url, filter, authConfig, format, runtime, retry, timeout, concurrency).\",\n\t\t{\n\t\t\tid: z.string(),\n\t\t\tname: z.string().optional().describe(\"Rename the subscription\"),\n\t\t\turl: z.string().optional(),\n\t\t\tfilter: z.record(z.string(), z.unknown()).optional(),\n\t\t\tauthConfig: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Receiver auth sent with each delivery (bearer/etc.)\"),\n\t\t\tformat: z\n\t\t\t\t.enum([\n\t\t\t\t\t\"standard-webhooks\",\n\t\t\t\t\t\"inngest\",\n\t\t\t\t\t\"trigger\",\n\t\t\t\t\t\"cloudflare\",\n\t\t\t\t\t\"cloudevents\",\n\t\t\t\t\t\"raw\",\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\truntime: z\n\t\t\t\t.enum([\"inngest\", \"trigger\", \"cloudflare\", \"node\"])\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t\tmaxRetries: z.number().int().min(0).optional(),\n\t\t\ttimeoutMs: z.number().int().min(100).optional(),\n\t\t\tconcurrency: z.number().int().min(1).optional(),\n\t\t},\n\t\tasync ({ id, ...patch }) => {\n\t\t\tconst res = await clientProvider().subscriptions.update(\n\t\t\t\tid,\n\t\t\t\tpatch as UpdateSubscriptionRequest,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_delete\",\n\t\t\"Delete a subscription. Pending outbox rows are cascade-deleted.\",\n\t\t{ id: z.string() },\n\t\tasync ({ id }) => {\n\t\t\tconst res = await clientProvider().subscriptions.delete(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_test\",\n\t\t\"Send a one-off test webhook to a subscription's URL (built for its format, SSRF-guarded). Logged as a delivery row. Returns {ok, statusCode, error, durationMs, deliveryId}.\",\n\t\t{ id: z.string().describe(\"Subscription id\") },\n\t\tasync ({ id }) => {\n\t\t\tconst res = await clientProvider().subscriptions.test(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tid: string;\n\t\tfromBlock: number;\n\t\ttoBlock: number;\n\t\tforce?: string;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_replay\",\n\t\t\"Replay a block range for a subscription. Replays run at 10% of batch capacity — use sparingly. Pass `force` (a short idempotency suffix) to re-run a range that was already replayed.\",\n\t\t{\n\t\t\tid: z.string(),\n\t\t\tfromBlock: z.number().int().nonnegative(),\n\t\t\ttoBlock: z.number().int().nonnegative(),\n\t\t\tforce: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Idempotency suffix to force a duplicate replay of the range\",\n\t\t\t\t),\n\t\t},\n\t\tasync ({ id, fromBlock, toBlock, force }) => {\n\t\t\tconst res = await clientProvider().subscriptions.replay(id, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t\t...(force !== undefined ? { force } : {}),\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n}\n"
18
18
  ],
19
- "mappings": "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",
20
- "debugId": "63BF73C1A0B18EDD64756E2164756E21",
19
+ "mappings": "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",
20
+ "debugId": "8D149B8CC4B9C7C464756E2164756E21",
21
21
  "names": []
22
22
  }
package/dist/index.js CHANGED
@@ -193,7 +193,7 @@ var COLUMN_TYPES = [
193
193
  }
194
194
  ];
195
195
  var PRODUCT_BLURBS = {
196
- index: "decoded L2 events, transfers, contract calls, blocks, transactions",
196
+ index: "decoded events, transfers, contract calls, blocks, transactions",
197
197
  streams: "bulk parquet dumps of the raw chain event firehose",
198
198
  contracts: "trait-based contract discovery and ABIs",
199
199
  subgraphs: "author/deploy/query custom indexes",
@@ -384,7 +384,7 @@ var heightFilters = {
384
384
  limit: rangeFilters.limit
385
385
  };
386
386
  function registerIndexTools(server, clientProvider = getClient) {
387
- defineTool(server, "index_ft_transfers", "List decoded SIP-010 fungible-token transfers from the Index (L2 decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).", {
387
+ defineTool(server, "index_ft_transfers", "List decoded SIP-010 fungible-token transfers from the Index (decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).", {
388
388
  ...rangeFilters,
389
389
  sender: z3.string().optional().describe("Filter by sender principal"),
390
390
  recipient: z3.string().optional().describe("Filter by recipient principal")
@@ -415,6 +415,9 @@ function registerIndexTools(server, clientProvider = getClient) {
415
415
  type: z3.string().optional().describe("Filter by transaction type"),
416
416
  sender: z3.string().optional().describe("Filter by sender principal")
417
417
  }, async (params) => jsonResponse(await clientProvider().index.transactions.list(params)));
418
+ defineTool(server, "index_print_schema", "Empirical per-topic print payload schemas for a contract, inferred from sampled on-chain events: each topic's fields with observed Clarity types, decoded TS types, subgraph column types, and presence rates. Use before writing print_event subgraph handlers to learn what's on e.data. Anonymous read.", {
419
+ contractId: z3.string().describe("Contract id (SP….name) whose print events to profile")
420
+ }, async (params) => jsonResponse(await clientProvider().index.printSchema(params.contractId)));
418
421
  defineTool(server, "index_discover", "Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.", {}, async () => jsonResponse(await clientProvider().index.discover()));
419
422
  defineTool(server, "batch_query", "Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.", {
420
423
  requests: z3.array(z3.object({
@@ -751,5 +754,5 @@ export {
751
754
  createServer
752
755
  };
753
756
 
754
- //# debugId=8F902CFB975F717764756E2164756E21
757
+ //# debugId=BB9FD3EAA61892D564756E2164756E21
755
758
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -3,19 +3,19 @@
3
3
  "sources": ["../src/server.ts", "../src/resources.ts", "../src/lib/client.ts", "../src/lib/format.ts", "../src/lib/tool.ts", "../src/tools/account.ts", "../src/tools/contracts.ts", "../src/tools/index.ts", "../src/tools/scaffold.ts", "../src/tools/streams.ts", "../src/tools/subgraphs.ts", "../src/tools/subscriptions.ts"],
4
4
  "sourcesContent": [
5
5
  "import { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { registerResources } from \"./resources.ts\";\nimport { registerAccountTools } from \"./tools/account.ts\";\nimport { registerContractTools } from \"./tools/contracts.ts\";\nimport { registerIndexTools } from \"./tools/index.ts\";\nimport { registerScaffoldTools } from \"./tools/scaffold.ts\";\nimport { registerStreamsTools } from \"./tools/streams.ts\";\nimport { registerSubgraphTools } from \"./tools/subgraphs.ts\";\nimport { registerSubscriptionTools } from \"./tools/subscriptions.ts\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(\n\treadFileSync(join(__dirname, \"../package.json\"), \"utf-8\"),\n);\n\nexport function createServer(): McpServer {\n\tconst server = new McpServer({\n\t\tname: \"secondlayer\",\n\t\tversion: pkg.version,\n\t});\n\n\tregisterScaffoldTools(server);\n\tregisterSubgraphTools(server);\n\tregisterSubscriptionTools(server);\n\tregisterAccountTools(server);\n\tregisterIndexTools(server);\n\tregisterStreamsTools(server);\n\tregisterContractTools(server);\n\tregisterResources(server);\n\n\treturn server;\n}\n",
6
- "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { CHAIN_TRIGGER_FIELDS } from \"@secondlayer/shared\";\nimport { TRAIT_STANDARDS } from \"@secondlayer/stacks/clarity\";\nimport { TYPE_MAP } from \"@secondlayer/subgraphs/schema\";\nimport type { ColumnType } from \"@secondlayer/subgraphs/types\";\nimport { getClient } from \"./lib/client.ts\";\nimport { formatSubgraphSummary } from \"./lib/format.ts\";\nimport { getRegisteredToolNames } from \"./lib/tool.ts\";\n\n// SubgraphFilter vocabulary — the per-type fields an agent may set on a source\n// filter. Fields are hand-authored (the per-type breakdown lives only in the\n// SubgraphFilter interfaces), but the drift test in resources.test.ts locks the\n// type set to VALID_FILTER_TYPES and asserts every field is accepted by the\n// `.strict()` SubgraphFilterSchema, so this can never advertise a field the\n// validator rejects. `trait` (TraitScope) indexes all contracts of a standard\n// (e.g. all SIP-010 tokens). `prints` on print_event is type-level only (not a\n// runtime match field) and is intentionally omitted.\n// One-line human blurb per SIP trait standard, keyed by TRAIT_STANDARDS so a new\n// standard forces an entry here.\nconst TRAIT_BLURBS: Record<(typeof TRAIT_STANDARDS)[number], string> = {\n\t\"sip-009\": \"Non-fungible token (NFT) standard\",\n\t\"sip-010\": \"Fungible token standard\",\n\t\"sip-013\": \"Semi-fungible token standard\",\n};\n\nexport const FILTERS_REFERENCE = [\n\t{\n\t\ttype: \"stx_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"minAmount\", \"maxAmount\"],\n\t},\n\t{ type: \"stx_mint\", fields: [\"recipient\", \"minAmount\"] },\n\t{ type: \"stx_burn\", fields: [\"sender\", \"minAmount\"] },\n\t{ type: \"stx_lock\", fields: [\"lockedAddress\", \"minAmount\"] },\n\t{\n\t\ttype: \"ft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_mint\",\n\t\tfields: [\"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_burn\",\n\t\tfields: [\"sender\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"nft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"trait\"],\n\t},\n\t{ type: \"nft_mint\", fields: [\"recipient\", \"assetIdentifier\", \"trait\"] },\n\t{ type: \"nft_burn\", fields: [\"sender\", \"assetIdentifier\", \"trait\"] },\n\t{\n\t\ttype: \"contract_call\",\n\t\tfields: [\"contractId\", \"functionName\", \"caller\", \"trait\", \"abi\"],\n\t},\n\t{ type: \"contract_deploy\", fields: [\"deployer\", \"contractName\"] },\n\t{ type: \"print_event\", fields: [\"contractId\", \"topic\", \"trait\"] },\n];\n\n// Human blurb per column type, keyed by ColumnType so adding a type to the union\n// forces an entry here (the drift test in resources.test.ts asserts full coverage).\nconst COLUMN_TYPE_DESCRIPTIONS: Record<ColumnType, string> = {\n\ttext: \"UTF-8 string\",\n\tuint: \"Unsigned integer (Clarity uint) — NUMERIC for lossless 128-bit range\",\n\tint: \"Signed integer (Clarity int) — NUMERIC for lossless 128-bit range\",\n\tprincipal: \"Stacks address (standard or contract)\",\n\tboolean: \"Boolean value\",\n\ttimestamp: \"Timestamp with time zone\",\n\tjsonb: \"Arbitrary JSON data\",\n};\n\n// Derived from the subgraphs TYPE_MAP so the type→SQL mapping can't drift behind\n// the deployer (which is what actually creates the columns).\nexport const COLUMN_TYPES: Array<Record<string, unknown>> = [\n\t...(Object.keys(TYPE_MAP) as ColumnType[]).map((type) => ({\n\t\ttype,\n\t\tsqlType: TYPE_MAP[type],\n\t\tdescription: COLUMN_TYPE_DESCRIPTIONS[type],\n\t})),\n\t{\n\t\toptions: [\"nullable\", \"indexed\", \"search\"],\n\t\tdescription:\n\t\t\t\"Column options: nullable allows NULL, indexed creates a B-tree index, search enables full-text search\",\n\t},\n];\n\n// One-line human blurb per product surface; the tool list for each is\n// generated from the live tool registry (see buildCapabilities) so it can't\n// drift behind the actual surface.\nconst PRODUCT_BLURBS: Record<string, string> = {\n\tindex: \"decoded L2 events, transfers, contract calls, blocks, transactions\",\n\tstreams: \"bulk parquet dumps of the raw chain event firehose\",\n\tcontracts: \"trait-based contract discovery and ABIs\",\n\tsubgraphs: \"author/deploy/query custom indexes\",\n\tsubscriptions: \"webhook delivery on subgraph rows or raw chain events\",\n\taccount: \"identity and self-provisioned API keys\",\n\tscaffold: \"generate deploy-ready subgraph code from a deployed contract\",\n};\n\nconst PRODUCT_ORDER = [\n\t\"index\",\n\t\"streams\",\n\t\"contracts\",\n\t\"subgraphs\",\n\t\"subscriptions\",\n\t\"account\",\n\t\"scaffold\",\n];\n\n/**\n * \"What you can do\" overview, generated from the registered tool names so every\n * tool surfaces under its product without a hand-maintained list to fall stale.\n * Tools register (via defineTool) before registerResources runs, so the\n * registry is fully populated by the time a context read calls this.\n */\nexport function buildCapabilities() {\n\tconst byPrefix = new Map<string, string[]>();\n\tfor (const name of getRegisteredToolNames()) {\n\t\tconst prefix = name.slice(0, name.indexOf(\"_\"));\n\t\tconst tools = byPrefix.get(prefix) ?? [];\n\t\ttools.push(name);\n\t\tbyPrefix.set(prefix, tools);\n\t}\n\tconst order = [\n\t\t...PRODUCT_ORDER.filter((p) => byPrefix.has(p)),\n\t\t...[...byPrefix.keys()].filter((p) => !PRODUCT_ORDER.includes(p)),\n\t];\n\tconst products = order.map((p) => {\n\t\tconst tools = byPrefix.get(p) ?? [];\n\t\tconst blurb = PRODUCT_BLURBS[p];\n\t\treturn blurb\n\t\t\t? `${p} — ${blurb} (${tools.join(\", \")})`\n\t\t\t: `${p} (${tools.join(\", \")})`;\n\t});\n\treturn {\n\t\tproducts,\n\t\tdiscoverFirst:\n\t\t\t\"Call index_discover / contracts_find to learn what exists (and which filters each surface accepts) before querying.\",\n\t};\n}\n\n/** Pay-per-call rail — how an accountless agent buys reads past the limits. */\nconst X402_CAPABILITY = {\n\twhat: \"Index and Streams reads (/v1/index/*, /v1/streams/*) accept x402 v2 pay-per-call (network stacks:1, sponsored transfers — the payer holds sBTC/STX/USDCx, never gas). Index grants 1,000 free reads/day/IP before any 402; a paid Streams call opens a 500-call/1h PAYMENT-SESSION.\",\n\tpaidWrites:\n\t\t\"POST /v1/subgraphs (x402 $2) deploys a subgraph owned by the paying wallet — live from deploy, 7-day TTL, renewable via POST /v1/subgraphs/{name}/renew ($0.50/wk); claiming the account clears the expiry.\",\n\tprepaid:\n\t\t\"POST /v1/x402/deposit?usd=N loads a prepaid tab (PAYMENT-BALANCE token, $0.25 min) — calls debit it instantly, no per-call on-chain settle. GET /v1/x402/balance reads it.\",\n\tdiscovery:\n\t\t\"GET /v1/x402/supported on the API host for scheme, assets, prices, quotas, sessions, and prepaid metadata.\",\n\tautopay:\n\t\t\"Set X402_PRIVATE_KEY (a Stacks private key holding an accepted token) and this MCP server pays 402 challenges automatically (sessions replayed). Add X402_TOPUP_USD (and optionally X402_TOPUP_WHEN_BELOW) for an autonomous prepaid tab that refills itself. Receipts are logged per paid call.\",\n};\n\n/** Per-product read-auth tiers — what an agent must know before reading. */\nconst READ_AUTH_TIERS = {\n\tindex:\n\t\t\"anonymous reads allowed; free-tier API keys are rejected (Build+ required)\",\n\tstreams: \"API key required (SL_API_KEY) — keyless calls return 401\",\n\tsubgraphs:\n\t\t\"public subgraphs anon-readable at /v1/subgraphs/<name>/<table> ({ rows, next_cursor, tip } cursor envelope); private subgraphs need the owning account's API key (anon → 404); writes require an API key\",\n};\n\ntype ContextDeps = {\n\tclientProvider: typeof getClient;\n};\n\n/**\n * Assemble the live agent context read at connect: who you are, the live\n * Streams/Index tips, what you own (subgraphs/subscriptions), any in-flight\n * reindex operations, what the agent can do, and the read-auth tiers. The\n * snapshot comes from the SDK's `context()` (shared with non-MCP agents); each\n * field that couldn't be read becomes a sentinel string so the resource never\n * throws and always orients the agent.\n */\nexport async function buildContext(\n\tdeps: ContextDeps = { clientProvider: getClient },\n) {\n\tconst unavailable = \"unavailable: set SL_API_KEY\";\n\tconst orNull = <T>(v: T | null | undefined) => (v == null ? unavailable : v);\n\n\tconst snap = await deps\n\t\t.clientProvider()\n\t\t.context()\n\t\t.catch(() => null);\n\n\treturn {\n\t\tauthState: {\n\t\t\tapiKeySet: Boolean(process.env.SL_API_KEY),\n\t\t\tx402WalletSet: Boolean(process.env.X402_PRIVATE_KEY),\n\t\t},\n\t\twhatExists: {\n\t\t\taccount: orNull(snap?.account),\n\t\t\tstreamsTip: orNull(snap?.streamsTip),\n\t\t\tindexTip: orNull(snap?.indexTip),\n\t\t\tsubgraphs: snap?.subgraphs\n\t\t\t\t? snap.subgraphs.map(formatSubgraphSummary)\n\t\t\t\t: unavailable,\n\t\t\tsubscriptions: orNull(snap?.subscriptions),\n\t\t\tprojects: orNull(snap?.projects),\n\t\t\tapiKeys: orNull(snap?.apiKeys),\n\t\t\tactiveOperations: orNull(snap?.activeOperations),\n\t\t},\n\t\twhatYouCanDo: buildCapabilities(),\n\t\treadAuthTiers: READ_AUTH_TIERS,\n\t\tpayPerCall: X402_CAPABILITY,\n\t};\n}\n\nexport function registerResources(server: McpServer) {\n\tserver.resource(\n\t\t\"context\",\n\t\t\"secondlayer://context\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://context\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(await buildContext(), null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"filters\",\n\t\t\"secondlayer://filters\",\n\t\t{ description: \"Event filter types and their available fields\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://filters\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(FILTERS_REFERENCE, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"column-types\",\n\t\t\"secondlayer://column-types\",\n\t\t{ description: \"Subgraph column types, SQL mappings, and options\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://column-types\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(COLUMN_TYPES, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"traits\",\n\t\t\"secondlayer://traits\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"SIP trait standards the platform can classify and scaffold against — the valid values for contracts_find `trait` and subgraph scaffold `--trait`.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://traits\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttraits: TRAIT_STANDARDS.map((id) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdescription: TRAIT_BLURBS[id],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"chain-triggers\",\n\t\t\"secondlayer://chain-triggers\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers).\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://chain-triggers\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(CHAIN_TRIGGER_FIELDS, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n}\n",
6
+ "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { CHAIN_TRIGGER_FIELDS } from \"@secondlayer/shared\";\nimport { TRAIT_STANDARDS } from \"@secondlayer/stacks/clarity\";\nimport { TYPE_MAP } from \"@secondlayer/subgraphs/schema\";\nimport type { ColumnType } from \"@secondlayer/subgraphs/types\";\nimport { getClient } from \"./lib/client.ts\";\nimport { formatSubgraphSummary } from \"./lib/format.ts\";\nimport { getRegisteredToolNames } from \"./lib/tool.ts\";\n\n// SubgraphFilter vocabulary — the per-type fields an agent may set on a source\n// filter. Fields are hand-authored (the per-type breakdown lives only in the\n// SubgraphFilter interfaces), but the drift test in resources.test.ts locks the\n// type set to VALID_FILTER_TYPES and asserts every field is accepted by the\n// `.strict()` SubgraphFilterSchema, so this can never advertise a field the\n// validator rejects. `trait` (TraitScope) indexes all contracts of a standard\n// (e.g. all SIP-010 tokens). `prints` on print_event is type-level only (not a\n// runtime match field) and is intentionally omitted.\n// One-line human blurb per SIP trait standard, keyed by TRAIT_STANDARDS so a new\n// standard forces an entry here.\nconst TRAIT_BLURBS: Record<(typeof TRAIT_STANDARDS)[number], string> = {\n\t\"sip-009\": \"Non-fungible token (NFT) standard\",\n\t\"sip-010\": \"Fungible token standard\",\n\t\"sip-013\": \"Semi-fungible token standard\",\n};\n\nexport const FILTERS_REFERENCE = [\n\t{\n\t\ttype: \"stx_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"minAmount\", \"maxAmount\"],\n\t},\n\t{ type: \"stx_mint\", fields: [\"recipient\", \"minAmount\"] },\n\t{ type: \"stx_burn\", fields: [\"sender\", \"minAmount\"] },\n\t{ type: \"stx_lock\", fields: [\"lockedAddress\", \"minAmount\"] },\n\t{\n\t\ttype: \"ft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_mint\",\n\t\tfields: [\"recipient\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"ft_burn\",\n\t\tfields: [\"sender\", \"assetIdentifier\", \"minAmount\", \"trait\"],\n\t},\n\t{\n\t\ttype: \"nft_transfer\",\n\t\tfields: [\"sender\", \"recipient\", \"assetIdentifier\", \"trait\"],\n\t},\n\t{ type: \"nft_mint\", fields: [\"recipient\", \"assetIdentifier\", \"trait\"] },\n\t{ type: \"nft_burn\", fields: [\"sender\", \"assetIdentifier\", \"trait\"] },\n\t{\n\t\ttype: \"contract_call\",\n\t\tfields: [\"contractId\", \"functionName\", \"caller\", \"trait\", \"abi\"],\n\t},\n\t{ type: \"contract_deploy\", fields: [\"deployer\", \"contractName\"] },\n\t{ type: \"print_event\", fields: [\"contractId\", \"topic\", \"trait\"] },\n];\n\n// Human blurb per column type, keyed by ColumnType so adding a type to the union\n// forces an entry here (the drift test in resources.test.ts asserts full coverage).\nconst COLUMN_TYPE_DESCRIPTIONS: Record<ColumnType, string> = {\n\ttext: \"UTF-8 string\",\n\tuint: \"Unsigned integer (Clarity uint) — NUMERIC for lossless 128-bit range\",\n\tint: \"Signed integer (Clarity int) — NUMERIC for lossless 128-bit range\",\n\tprincipal: \"Stacks address (standard or contract)\",\n\tboolean: \"Boolean value\",\n\ttimestamp: \"Timestamp with time zone\",\n\tjsonb: \"Arbitrary JSON data\",\n};\n\n// Derived from the subgraphs TYPE_MAP so the type→SQL mapping can't drift behind\n// the deployer (which is what actually creates the columns).\nexport const COLUMN_TYPES: Array<Record<string, unknown>> = [\n\t...(Object.keys(TYPE_MAP) as ColumnType[]).map((type) => ({\n\t\ttype,\n\t\tsqlType: TYPE_MAP[type],\n\t\tdescription: COLUMN_TYPE_DESCRIPTIONS[type],\n\t})),\n\t{\n\t\toptions: [\"nullable\", \"indexed\", \"search\"],\n\t\tdescription:\n\t\t\t\"Column options: nullable allows NULL, indexed creates a B-tree index, search enables full-text search\",\n\t},\n];\n\n// One-line human blurb per product surface; the tool list for each is\n// generated from the live tool registry (see buildCapabilities) so it can't\n// drift behind the actual surface.\nconst PRODUCT_BLURBS: Record<string, string> = {\n\tindex: \"decoded events, transfers, contract calls, blocks, transactions\",\n\tstreams: \"bulk parquet dumps of the raw chain event firehose\",\n\tcontracts: \"trait-based contract discovery and ABIs\",\n\tsubgraphs: \"author/deploy/query custom indexes\",\n\tsubscriptions: \"webhook delivery on subgraph rows or raw chain events\",\n\taccount: \"identity and self-provisioned API keys\",\n\tscaffold: \"generate deploy-ready subgraph code from a deployed contract\",\n};\n\nconst PRODUCT_ORDER = [\n\t\"index\",\n\t\"streams\",\n\t\"contracts\",\n\t\"subgraphs\",\n\t\"subscriptions\",\n\t\"account\",\n\t\"scaffold\",\n];\n\n/**\n * \"What you can do\" overview, generated from the registered tool names so every\n * tool surfaces under its product without a hand-maintained list to fall stale.\n * Tools register (via defineTool) before registerResources runs, so the\n * registry is fully populated by the time a context read calls this.\n */\nexport function buildCapabilities() {\n\tconst byPrefix = new Map<string, string[]>();\n\tfor (const name of getRegisteredToolNames()) {\n\t\tconst prefix = name.slice(0, name.indexOf(\"_\"));\n\t\tconst tools = byPrefix.get(prefix) ?? [];\n\t\ttools.push(name);\n\t\tbyPrefix.set(prefix, tools);\n\t}\n\tconst order = [\n\t\t...PRODUCT_ORDER.filter((p) => byPrefix.has(p)),\n\t\t...[...byPrefix.keys()].filter((p) => !PRODUCT_ORDER.includes(p)),\n\t];\n\tconst products = order.map((p) => {\n\t\tconst tools = byPrefix.get(p) ?? [];\n\t\tconst blurb = PRODUCT_BLURBS[p];\n\t\treturn blurb\n\t\t\t? `${p} — ${blurb} (${tools.join(\", \")})`\n\t\t\t: `${p} (${tools.join(\", \")})`;\n\t});\n\treturn {\n\t\tproducts,\n\t\tdiscoverFirst:\n\t\t\t\"Call index_discover / contracts_find to learn what exists (and which filters each surface accepts) before querying.\",\n\t};\n}\n\n/** Pay-per-call rail — how an accountless agent buys reads past the limits. */\nconst X402_CAPABILITY = {\n\twhat: \"Index and Streams reads (/v1/index/*, /v1/streams/*) accept x402 v2 pay-per-call (network stacks:1, sponsored transfers — the payer holds sBTC/STX/USDCx, never gas). Index grants 1,000 free reads/day/IP before any 402; a paid Streams call opens a 500-call/1h PAYMENT-SESSION.\",\n\tpaidWrites:\n\t\t\"POST /v1/subgraphs (x402 $2) deploys a subgraph owned by the paying wallet — live from deploy, 7-day TTL, renewable via POST /v1/subgraphs/{name}/renew ($0.50/wk); claiming the account clears the expiry.\",\n\tprepaid:\n\t\t\"POST /v1/x402/deposit?usd=N loads a prepaid tab (PAYMENT-BALANCE token, $0.25 min) — calls debit it instantly, no per-call on-chain settle. GET /v1/x402/balance reads it.\",\n\tdiscovery:\n\t\t\"GET /v1/x402/supported on the API host for scheme, assets, prices, quotas, sessions, and prepaid metadata.\",\n\tautopay:\n\t\t\"Set X402_PRIVATE_KEY (a Stacks private key holding an accepted token) and this MCP server pays 402 challenges automatically (sessions replayed). Add X402_TOPUP_USD (and optionally X402_TOPUP_WHEN_BELOW) for an autonomous prepaid tab that refills itself. Receipts are logged per paid call.\",\n};\n\n/** Per-product read-auth tiers — what an agent must know before reading. */\nconst READ_AUTH_TIERS = {\n\tindex:\n\t\t\"anonymous reads allowed; free-tier API keys are rejected (Build+ required)\",\n\tstreams: \"API key required (SL_API_KEY) — keyless calls return 401\",\n\tsubgraphs:\n\t\t\"public subgraphs anon-readable at /v1/subgraphs/<name>/<table> ({ rows, next_cursor, tip } cursor envelope); private subgraphs need the owning account's API key (anon → 404); writes require an API key\",\n};\n\ntype ContextDeps = {\n\tclientProvider: typeof getClient;\n};\n\n/**\n * Assemble the live agent context read at connect: who you are, the live\n * Streams/Index tips, what you own (subgraphs/subscriptions), any in-flight\n * reindex operations, what the agent can do, and the read-auth tiers. The\n * snapshot comes from the SDK's `context()` (shared with non-MCP agents); each\n * field that couldn't be read becomes a sentinel string so the resource never\n * throws and always orients the agent.\n */\nexport async function buildContext(\n\tdeps: ContextDeps = { clientProvider: getClient },\n) {\n\tconst unavailable = \"unavailable: set SL_API_KEY\";\n\tconst orNull = <T>(v: T | null | undefined) => (v == null ? unavailable : v);\n\n\tconst snap = await deps\n\t\t.clientProvider()\n\t\t.context()\n\t\t.catch(() => null);\n\n\treturn {\n\t\tauthState: {\n\t\t\tapiKeySet: Boolean(process.env.SL_API_KEY),\n\t\t\tx402WalletSet: Boolean(process.env.X402_PRIVATE_KEY),\n\t\t},\n\t\twhatExists: {\n\t\t\taccount: orNull(snap?.account),\n\t\t\tstreamsTip: orNull(snap?.streamsTip),\n\t\t\tindexTip: orNull(snap?.indexTip),\n\t\t\tsubgraphs: snap?.subgraphs\n\t\t\t\t? snap.subgraphs.map(formatSubgraphSummary)\n\t\t\t\t: unavailable,\n\t\t\tsubscriptions: orNull(snap?.subscriptions),\n\t\t\tprojects: orNull(snap?.projects),\n\t\t\tapiKeys: orNull(snap?.apiKeys),\n\t\t\tactiveOperations: orNull(snap?.activeOperations),\n\t\t},\n\t\twhatYouCanDo: buildCapabilities(),\n\t\treadAuthTiers: READ_AUTH_TIERS,\n\t\tpayPerCall: X402_CAPABILITY,\n\t};\n}\n\nexport function registerResources(server: McpServer) {\n\tserver.resource(\n\t\t\"context\",\n\t\t\"secondlayer://context\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Live agent context — what exists (your subgraphs, subscriptions, account), what you can do, and read-auth tiers. Read this first.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://context\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(await buildContext(), null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"filters\",\n\t\t\"secondlayer://filters\",\n\t\t{ description: \"Event filter types and their available fields\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://filters\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(FILTERS_REFERENCE, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"column-types\",\n\t\t\"secondlayer://column-types\",\n\t\t{ description: \"Subgraph column types, SQL mappings, and options\" },\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://column-types\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(COLUMN_TYPES, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"traits\",\n\t\t\"secondlayer://traits\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"SIP trait standards the platform can classify and scaffold against — the valid values for contracts_find `trait` and subgraph scaffold `--trait`.\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://traits\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttraits: TRAIT_STANDARDS.map((id) => ({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tdescription: TRAIT_BLURBS[id],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n\n\tserver.resource(\n\t\t\"chain-triggers\",\n\t\t\"secondlayer://chain-triggers\",\n\t\t{\n\t\t\tdescription:\n\t\t\t\t\"Chain-subscription trigger types and the filter fields each accepts (for subscriptions_create triggers).\",\n\t\t},\n\t\tasync () => ({\n\t\t\tcontents: [\n\t\t\t\t{\n\t\t\t\t\turi: \"secondlayer://chain-triggers\",\n\t\t\t\t\tmimeType: \"application/json\",\n\t\t\t\t\ttext: JSON.stringify(CHAIN_TRIGGER_FIELDS, null, 2),\n\t\t\t\t},\n\t\t\t],\n\t\t}),\n\t);\n}\n",
7
7
  "import { SecondLayer, readX402Receipt, withX402 } from \"@secondlayer/sdk\";\nimport { privateKeyToAccount } from \"@secondlayer/stacks/accounts\";\n\nlet instance: SecondLayer | null = null;\n\n/**\n * Read the API key from env. `SL_API_KEY` is the single credential var, matching\n * the CLI and SDK. (The former `SL_SERVICE_KEY` / `SECONDLAYER_API_KEY` aliases\n * were removed.)\n */\nfunction readApiKey(): string | undefined {\n\treturn process.env.SL_API_KEY;\n}\n\n/**\n * Lazy SDK singleton. Built keyless when no key is set so read tools (list,\n * get, query, spec) work during open beta — reads are public. Write tools\n * (deploy/reindex/delete) and account tools hit the API without a key and get\n * a 401, surfaced with a key hint via `keyHint` below.\n */\n/**\n * When `X402_PRIVATE_KEY` is set (a Stacks key holding an accepted token),\n * wrap fetch so 402 challenges on paid surfaces are paid automatically —\n * sponsored transfers, so the wallet never needs STX for gas. Each paid\n * call logs its settlement receipt to stderr (stdio-transport safe).\n */\nfunction buildFetchImpl(): typeof fetch | undefined {\n\tconst key = process.env.X402_PRIVATE_KEY;\n\tif (!key) return undefined;\n\tconst account = privateKeyToAccount(key);\n\t// Optional treasury policy: deposit X402_TOPUP_USD whenever the prepaid\n\t// tab drops below X402_TOPUP_WHEN_BELOW (defaults $0.50). Without it,\n\t// every paid call settles individually.\n\tconst topUpUsd = Number(process.env.X402_TOPUP_USD ?? \"\");\n\tconst paid = withX402(fetch, {\n\t\taccount,\n\t\t...(Number.isFinite(topUpUsd) && topUpUsd > 0\n\t\t\t? {\n\t\t\t\t\ttopUp: {\n\t\t\t\t\t\tusd: topUpUsd,\n\t\t\t\t\t\twhenBelow: Number(process.env.X402_TOPUP_WHEN_BELOW ?? \"0.5\"),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\tconst wrapped = async (input: string | URL, init?: RequestInit) => {\n\t\tconst res = await paid(input, init);\n\t\tconst receipt = readX402Receipt(res);\n\t\tif (receipt) {\n\t\t\tconsole.error(\n\t\t\t\t`[x402] paid call settled tier=${receipt.state ?? \"confirmed\"} txid=${receipt.txid}`,\n\t\t\t);\n\t\t}\n\t\treturn res;\n\t};\n\t// SecondLayer only ever calls fetchImpl(url, init); Bun's `typeof fetch`\n\t// additionally carries `preconnect`, hence the cast.\n\treturn wrapped as unknown as typeof fetch;\n}\n\nexport function getClient(): SecondLayer {\n\tif (!instance) {\n\t\tconst apiKey = readApiKey();\n\t\tconst baseUrl = process.env.SECONDLAYER_API_URL;\n\t\tconst dumpsBaseUrl = process.env.SL_STREAMS_DUMPS_URL;\n\t\tconst fetchImpl = buildFetchImpl();\n\t\tinstance = new SecondLayer({\n\t\t\t...(apiKey ? { apiKey } : {}),\n\t\t\torigin: \"mcp\",\n\t\t\t...(baseUrl ? { baseUrl } : {}),\n\t\t\t...(dumpsBaseUrl ? { dumpsBaseUrl } : {}),\n\t\t\t...(fetchImpl ? { fetchImpl } : {}),\n\t\t});\n\t}\n\treturn instance;\n}\n\n// Appended to 401/403 errors raised on keyless requests — the operation needs\n// a write/account key, so point at where to get one.\nexport const keyHint =\n\t\" — set SL_API_KEY to an sk-sl_ API key from \" +\n\t\"https://secondlayer.tools/platform/api-keys for write and account operations\";\n\n/** Raw fetch helper for API endpoints not covered by the SDK. */\nexport async function apiRequest<T>(\n\tmethod: string,\n\tpath: string,\n\tbody?: unknown,\n): Promise<T> {\n\tconst apiKey = readApiKey();\n\tconst baseUrl =\n\t\tprocess.env.SECONDLAYER_API_URL || \"https://api.secondlayer.tools\";\n\tconst res = await fetch(`${baseUrl}${path}`, {\n\t\tmethod,\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t},\n\t\tbody: body ? JSON.stringify(body) : undefined,\n\t});\n\tif (!res.ok) {\n\t\tconst text = await res.text().catch(() => \"\");\n\t\tconst needsKey = !apiKey && (res.status === 401 || res.status === 403);\n\t\tthrow Object.assign(\n\t\t\tnew Error((text || `HTTP ${res.status}`) + (needsKey ? keyHint : \"\")),\n\t\t\t{ status: res.status },\n\t\t);\n\t}\n\tif (res.status === 204) return undefined as T;\n\treturn res.json() as Promise<T>;\n}\n",
8
8
  "/** Summarize a subgraph for list responses. */\nexport function formatSubgraphSummary(s: {\n\tname: string;\n\tstatus: string;\n\ttables: string[] | Record<string, unknown>;\n\tlastProcessedBlock: number;\n\tvisibility?: \"public\" | \"private\";\n}) {\n\tconst apiUrl =\n\t\tprocess.env.SECONDLAYER_API_URL || \"https://api.secondlayer.tools\";\n\treturn {\n\t\tname: s.name,\n\t\tstatus: s.status,\n\t\ttables: Array.isArray(s.tables) ? s.tables : Object.keys(s.tables),\n\t\tlastProcessedBlock: s.lastProcessedBlock,\n\t\t...(s.visibility ? { visibility: s.visibility } : {}),\n\t\t// Public subgraphs are anon-readable — surface the shareable /v1 URL.\n\t\t...(s.visibility === \"public\"\n\t\t\t? { publicUrl: `${apiUrl}/v1/subgraphs/${s.name}` }\n\t\t\t: {}),\n\t};\n}\n\n/** Cap array length and return truncation metadata. */\nexport function withCap<T>(\n\titems: T[],\n\tcap: number,\n): { items: T[]; truncated: boolean; total: number } {\n\treturn {\n\t\titems: items.slice(0, cap),\n\t\ttruncated: items.length > cap,\n\t\ttotal: items.length,\n\t};\n}\n\n/** Build MCP text response with JSON-serialized payload. */\nexport function jsonResponse(\n\tdata: unknown,\n\tisError?: boolean,\n): { content: Array<{ type: \"text\"; text: string }>; isError?: boolean } {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n\t\t...(isError && { isError: true }),\n\t};\n}\n\n/** Build MCP text response with plain text payload. */\nexport function textResponse(\n\ttext: string,\n\tisError?: boolean,\n): { content: Array<{ type: \"text\"; text: string }>; isError?: boolean } {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError && { isError: true }),\n\t};\n}\n",
9
9
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\ninterface ToolResult {\n\tcontent: Array<{ type: \"text\"; text: string }>;\n\tisError?: boolean;\n}\n\n// Names of every tool registered via defineTool, in registration order. The\n// context resource generates its capability list from this so CAPABILITIES can\n// never drift behind the actual tool surface (a new tool auto-appears). A Set\n// dedupes across repeated createServer() calls in tests.\nconst registeredToolNames = new Set<string>();\n\n/** Tool names registered so far this process (see {@link defineTool}). */\nexport function getRegisteredToolNames(): string[] {\n\treturn [...registeredToolNames];\n}\n\n/**\n * Type-safe wrapper around McpServer.tool() that avoids TS2589.\n *\n * The MCP SDK's Zod-generic `tool()` signature recurses past TypeScript's\n * instantiation depth limit when schemas contain discriminated unions or\n * nested optionals. This helper isolates the boundary cast to one place\n * so tool files stay fully typed via the explicit `T` generic.\n *\n * Schema is typed as Record<string, unknown> to prevent TypeScript from\n * resolving the deeply recursive ZodRawShapeCompat constraint. Zod still\n * validates at runtime.\n */\nexport function defineTool<T>(\n\tserver: McpServer,\n\tname: string,\n\tdescription: string,\n\tschema: Record<string, unknown>,\n\thandler: (args: T) => Promise<ToolResult> | ToolResult,\n): void {\n\tconst wrappedHandler = async (args: T): Promise<ToolResult> => {\n\t\ttry {\n\t\t\treturn await handler(args);\n\t\t} catch (err: unknown) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tconst status =\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\t\terr instanceof Error && \"status\" in err ? (err as any).status : 0;\n\t\t\tconst type =\n\t\t\t\tstatus === 401\n\t\t\t\t\t? \"unauthorized\"\n\t\t\t\t\t: status === 404\n\t\t\t\t\t\t? \"not_found\"\n\t\t\t\t\t\t: status === 429\n\t\t\t\t\t\t\t? \"rate_limited\"\n\t\t\t\t\t\t\t: status >= 500\n\t\t\t\t\t\t\t\t? \"server_error\"\n\t\t\t\t\t\t\t\t: \"error\";\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify({ error: { type, status, message } }),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t}\n\t};\n\tregisteredToolNames.add(name);\n\t(server.tool as (...args: unknown[]) => unknown)(\n\t\tname,\n\t\tdescription,\n\t\tschema,\n\t\twrappedHandler,\n\t);\n}\n",
10
10
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod/v4\";\nimport { apiRequest, getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\nexport function registerAccountTools(server: McpServer) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"account_whoami\",\n\t\t\"Show the authenticated account's email and plan.\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst result = await apiRequest<{ email: string; plan: string }>(\n\t\t\t\t\"GET\",\n\t\t\t\t\"/api/accounts/me\",\n\t\t\t);\n\t\t\treturn jsonResponse(result);\n\t\t},\n\t);\n\n\tdefineTool<{ product?: \"streams\" | \"index\"; name?: string }>(\n\t\tserver,\n\t\t\"account_create_key\",\n\t\t\"Mint a scoped streams/index read API key so the agent can self-provision access. Requires an account-level (owner) API key. The returned `key` is shown ONCE — forward it to the user to set as SL_API_KEY.\",\n\t\t{\n\t\t\tproduct: z\n\t\t\t\t.enum([\"streams\", \"index\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Key scope (default streams)\"),\n\t\t\tname: z.string().optional().describe(\"Optional label for the key\"),\n\t\t},\n\t\tasync ({ product, name }) =>\n\t\t\tjsonResponse(await getClient().apiKeys.create({ product, name })),\n\t);\n}\n",
11
11
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nexport function registerContractTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\ttrait: string;\n\t\tconformance?: \"declared\" | \"inferred\" | \"any\";\n\t\tinclude?: \"abi\";\n\t\tlimit?: number;\n\t\tcursor?: string;\n\t}>(\n\t\tserver,\n\t\t\"contracts_find\",\n\t\t'Discover deployed Stacks contracts conforming to a trait (e.g. \"sip-010\", \"sip-009\", \"sip-013\"). The discovery endpoint for \"which contracts implement X\". Reads are public.',\n\t\t{\n\t\t\ttrait: z.string().describe('Required. Trait to match (e.g. \"sip-010\").'),\n\t\t\tconformance: z\n\t\t\t\t.enum([\"declared\", \"inferred\", \"any\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"declared = parsed from source, inferred = ABI shape-match, any = either (default)\",\n\t\t\t\t),\n\t\t\tinclude: z\n\t\t\t\t.literal(\"abi\")\n\t\t\t\t.optional()\n\t\t\t\t.describe('Set to \"abi\" to include each contract\\'s full ABI'),\n\t\t\tlimit: z.number().optional().describe(\"Page size, 1–500 (default 100)\"),\n\t\t\tcursor: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().contracts.list(params)),\n\t);\n\n\tdefineTool<{ contractId: string }>(\n\t\tserver,\n\t\t\"get_contract_abi\",\n\t\t\"Fetch a single deployed contract's ABI from the registry (prod-safe). Returns the contract's metadata + full ABI (functions, maps, variables, fungible/non-fungible tokens). Returns not_found if the contract isn't in the registry. Use it to inspect a contract before scaffold_from_contract.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"Fully qualified contract id (e.g. SP….amm-pool-v2-01)\"),\n\t\t},\n\t\tasync ({ contractId }) => {\n\t\t\tconst contract = await clientProvider().contracts.get(contractId, {\n\t\t\t\tincludeAbi: true,\n\t\t\t});\n\t\t\treturn contract\n\t\t\t\t? jsonResponse(contract)\n\t\t\t\t: jsonResponse(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\ttype: \"not_found\",\n\t\t\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\t\t\tmessage: `Contract not in registry: ${contractId}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t},\n\t);\n\n}\n",
12
- "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { DECODED_EVENT_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nconst INDEX_EVENT_TYPES = DECODED_EVENT_TYPES;\n\n/** Filters shared by the height/cursor-paginated Index endpoints. */\nconst rangeFilters = {\n\tcontractId: z.string().optional().describe(\"Filter by contract id\"),\n\tfromHeight: z.number().optional().describe(\"Start block height (inclusive)\"),\n\ttoHeight: z.number().optional().describe(\"End block height (inclusive)\"),\n\tcursor: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\tlimit: z.number().optional().describe(\"Max rows for this page\"),\n};\n\n/** Height-range subset for endpoints that don't filter by contract (blocks). */\nconst heightFilters = {\n\tfromHeight: rangeFilters.fromHeight,\n\ttoHeight: rangeFilters.toHeight,\n\tcursor: rangeFilters.cursor,\n\tlimit: rangeFilters.limit,\n};\n\nexport function registerIndexTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_ft_transfers\",\n\t\t\"List decoded SIP-010 fungible-token transfers from the Index (L2 decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.ftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_nft_transfers\",\n\t\t\"List decoded SIP-009 non-fungible-token transfers from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier (contract::asset)\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.nftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\teventType: (typeof INDEX_EVENT_TYPES)[number];\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_events\",\n\t\t\"List decoded chain events from the Index by event type. Use this for event types without a dedicated tool (stx_*, ft_mint/burn, nft_mint/burn, print), and for trait-scoped queries: set `trait` (e.g. sip-010) to match all contracts conforming to a standard — pair with contracts_find to discover traits. For ft/nft transfers without a trait prefer index_ft_transfers / index_nft_transfers.\",\n\t\t{\n\t\t\teventType: z\n\t\t\t\t.enum(INDEX_EVENT_TYPES)\n\t\t\t\t.describe(\"Required. Decoded event type to list.\"),\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier where applicable\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId; contract-keyed event types only.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.events.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tfunctionName?: string;\n\t\tsender?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_contract_calls\",\n\t\t\"List decoded contract calls from the Index (function name, args, result). Set `trait` (e.g. sip-010) to match calls to all contracts conforming to a standard. Note: contract-call cursors are a SEPARATE keyspace from event cursors — they are not interchangeable.\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tfunctionName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by called function name\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by caller principal\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.contractCalls.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_blocks\",\n\t\t\"List decoded blocks from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{ ...heightFilters },\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.blocks.list(params)),\n\t);\n\n\tdefineTool<{\n\t\ttype?: string;\n\t\tsender?: string;\n\t\tcontractId?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_transactions\",\n\t\t\"List decoded transactions from the Index. Filter by type, sender, or contract. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\ttype: z.string().optional().describe(\"Filter by transaction type\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.transactions.list(params)),\n\t);\n\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"index_discover\",\n\t\t\"Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().index.discover()),\n\t);\n\n\tdefineTool<{\n\t\trequests: Array<{ path: string; params?: Record<string, string> }>;\n\t}>(\n\t\tserver,\n\t\t\"batch_query\",\n\t\t\"Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.\",\n\t\t{\n\t\t\trequests: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tpath: z.string().describe(\"Public /v1 read path\"),\n\t\t\t\t\t\tparams: z.record(z.string(), z.string()).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.min(1)\n\t\t\t\t.max(10)\n\t\t\t\t.describe(\"Read descriptors, executed concurrently\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().batch(params.requests)),\n\t);\n}\n",
12
+ "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { DECODED_EVENT_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nconst INDEX_EVENT_TYPES = DECODED_EVENT_TYPES;\n\n/** Filters shared by the height/cursor-paginated Index endpoints. */\nconst rangeFilters = {\n\tcontractId: z.string().optional().describe(\"Filter by contract id\"),\n\tfromHeight: z.number().optional().describe(\"Start block height (inclusive)\"),\n\ttoHeight: z.number().optional().describe(\"End block height (inclusive)\"),\n\tcursor: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"Opaque cursor from a prior response's next_cursor\"),\n\tlimit: z.number().optional().describe(\"Max rows for this page\"),\n};\n\n/** Height-range subset for endpoints that don't filter by contract (blocks). */\nconst heightFilters = {\n\tfromHeight: rangeFilters.fromHeight,\n\ttoHeight: rangeFilters.toHeight,\n\tcursor: rangeFilters.cursor,\n\tlimit: rangeFilters.limit,\n};\n\nexport function registerIndexTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_ft_transfers\",\n\t\t\"List decoded SIP-010 fungible-token transfers from the Index (decoded layer). Anonymous reads allowed (free-tier API keys are rejected — Build+ required).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.ftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_nft_transfers\",\n\t\t\"List decoded SIP-009 non-fungible-token transfers from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier (contract::asset)\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.nftTransfers.list(params)),\n\t);\n\n\tdefineTool<{\n\t\teventType: (typeof INDEX_EVENT_TYPES)[number];\n\t\tcontractId?: string;\n\t\tsender?: string;\n\t\trecipient?: string;\n\t\tassetIdentifier?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_events\",\n\t\t\"List decoded chain events from the Index by event type. Use this for event types without a dedicated tool (stx_*, ft_mint/burn, nft_mint/burn, print), and for trait-scoped queries: set `trait` (e.g. sip-010) to match all contracts conforming to a standard — pair with contracts_find to discover traits. For ft/nft transfers without a trait prefer index_ft_transfers / index_nft_transfers.\",\n\t\t{\n\t\t\teventType: z\n\t\t\t\t.enum(INDEX_EVENT_TYPES)\n\t\t\t\t.describe(\"Required. Decoded event type to list.\"),\n\t\t\t...rangeFilters,\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t\trecipient: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by recipient principal\"),\n\t\t\tassetIdentifier: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by asset identifier where applicable\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId; contract-keyed event types only.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.events.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tcontractId?: string;\n\t\tfunctionName?: string;\n\t\tsender?: string;\n\t\ttrait?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_contract_calls\",\n\t\t\"List decoded contract calls from the Index (function name, args, result). Set `trait` (e.g. sip-010) to match calls to all contracts conforming to a standard. Note: contract-call cursors are a SEPARATE keyspace from event cursors — they are not interchangeable.\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\tfunctionName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by called function name\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by caller principal\"),\n\t\t\ttrait: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Match contracts conforming to a trait/standard (e.g. sip-010). Mutually exclusive with contractId.\",\n\t\t\t\t),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.contractCalls.list(params)),\n\t);\n\n\tdefineTool<{\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_blocks\",\n\t\t\"List decoded blocks from the Index. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{ ...heightFilters },\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.blocks.list(params)),\n\t);\n\n\tdefineTool<{\n\t\ttype?: string;\n\t\tsender?: string;\n\t\tcontractId?: string;\n\t\tfromHeight?: number;\n\t\ttoHeight?: number;\n\t\tcursor?: string;\n\t\tlimit?: number;\n\t}>(\n\t\tserver,\n\t\t\"index_transactions\",\n\t\t\"List decoded transactions from the Index. Filter by type, sender, or contract. Anonymous reads allowed (free-tier keys rejected).\",\n\t\t{\n\t\t\t...rangeFilters,\n\t\t\ttype: z.string().optional().describe(\"Filter by transaction type\"),\n\t\t\tsender: z.string().optional().describe(\"Filter by sender principal\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.transactions.list(params)),\n\t);\n\n\tdefineTool<{ contractId: string }>(\n\t\tserver,\n\t\t\"index_print_schema\",\n\t\t\"Empirical per-topic print payload schemas for a contract, inferred from sampled on-chain events: each topic's fields with observed Clarity types, decoded TS types, subgraph column types, and presence rates. Use before writing print_event subgraph handlers to learn what's on e.data. Anonymous read.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"Contract id (SP….name) whose print events to profile\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().index.printSchema(params.contractId)),\n\t);\n\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"index_discover\",\n\t\t\"Discover the Index vocabulary: every event type and its columns, allowed/equality filters, and required-non-null fields (and which types accept `trait`). Read this before building Index queries instead of guessing filters. Anonymous read.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().index.discover()),\n\t);\n\n\tdefineTool<{\n\t\trequests: Array<{ path: string; params?: Record<string, string> }>;\n\t}>(\n\t\tserver,\n\t\t\"batch_query\",\n\t\t\"Run up to 10 public /v1 reads in one round trip (POST /v1/batch). Each item keeps its own auth/quota/pay-per-call semantics; results return in order with per-item status. Paths must start with /v1/index, /v1/subgraphs, /v1/streams, or /v1/contracts.\",\n\t\t{\n\t\t\trequests: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tpath: z.string().describe(\"Public /v1 read path\"),\n\t\t\t\t\t\tparams: z.record(z.string(), z.string()).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.min(1)\n\t\t\t\t.max(10)\n\t\t\t\t.describe(\"Read descriptors, executed concurrently\"),\n\t\t},\n\t\tasync (params) =>\n\t\t\tjsonResponse(await clientProvider().batch(params.requests)),\n\t);\n}\n",
13
13
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { generateSubgraphCode } from \"@secondlayer/scaffold\";\nimport type { AbiFunction, AbiMap } from \"@secondlayer/scaffold\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\n// Source ABIs from the platform contract registry (prod-safe). The old\n// `/api/node/contracts/:id/abi` proxy is OSS/dedicated-only and 404s in prod.\nasync function fetchAbi(\n\tclientProvider: ClientProvider,\n\tcontractId: string,\n): Promise<{ functions: AbiFunction[]; maps: AbiMap[] }> {\n\tconst contract = await clientProvider().contracts.get(contractId, {\n\t\tincludeAbi: true,\n\t});\n\tif (!contract) throw new Error(`Contract not found: ${contractId}`);\n\tconst abi = contract.abi as {\n\t\tfunctions?: AbiFunction[];\n\t\tmaps?: AbiMap[];\n\t} | null;\n\tif (!abi) {\n\t\tthrow new Error(\n\t\t\t`No ABI available for ${contractId} (abi_status: ${contract.abi_status})`,\n\t\t);\n\t}\n\treturn { functions: abi.functions ?? [], maps: abi.maps ?? [] };\n}\n\nexport function registerScaffoldTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<{ contractId: string; subgraphName?: string }>(\n\t\tserver,\n\t\t\"scaffold_from_contract\",\n\t\t\"Generate a subgraph scaffold from a deployed Stacks contract. Fetches the ABI automatically.\",\n\t\t{\n\t\t\tcontractId: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Fully qualified contract ID (e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01)\",\n\t\t\t\t),\n\t\t\tsubgraphName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Override the subgraph name (defaults to contract name)\"),\n\t\t},\n\t\tasync ({ contractId, subgraphName }) => {\n\t\t\tconst { functions, maps } = await fetchAbi(clientProvider, contractId);\n\t\t\tconst code = generateSubgraphCode(\n\t\t\t\tcontractId,\n\t\t\t\tfunctions,\n\t\t\t\tsubgraphName,\n\t\t\t\tmaps,\n\t\t\t);\n\t\t\treturn { content: [{ type: \"text\", text: code }] };\n\t\t},\n\t);\n}\n",
14
14
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { getClient } from \"../lib/client.ts\";\nimport { jsonResponse } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype ClientProvider = typeof getClient;\n\nexport function registerStreamsTools(\n\tserver: McpServer,\n\tclientProvider: ClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"streams_dumps\",\n\t\t\"List the Streams bulk parquet dumps manifest — coverage range, latest_finalized_cursor, and per-file metadata (block range, row count, size, sha256, signed URL). This is the cold backfill path for downloading all raw data; fetch the file URLs directly (e.g. with DuckDB). Requires the dumps base URL to be configured (SL_STREAMS_DUMPS_URL). Live Streams reads (tip, events, consume) are REST-only: see /v1/streams/* in the OpenAPI spec.\",\n\t\t{},\n\t\tasync () => jsonResponse(await clientProvider().streams.dumps.list()),\n\t);\n}\n",
15
15
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { bundleSubgraphCode } from \"@secondlayer/bundler\";\nimport { ByoBreakingChangeError } from \"@secondlayer/sdk\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { formatSubgraphSummary, withCap } from \"../lib/format.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype SubgraphClientProvider = typeof getClient;\n\nexport function registerSubgraphTools(\n\tserver: McpServer,\n\tclientProvider: SubgraphClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"subgraphs_list\",\n\t\t\"List all deployed subgraphs. Returns summary fields only, including visibility — public subgraphs are anon-readable at /v1/subgraphs/<name>.\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst { data } = await clientProvider().subgraphs.list();\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: JSON.stringify(data.map(formatSubgraphSummary), null, 2),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_get\",\n\t\t\"Get full details of a subgraph including schema, health, and table columns.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst detail = await clientProvider().subgraphs.get(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(detail, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\ttable: string;\n\t\tfilters?: Record<string, string>;\n\t\tsort?: string;\n\t\torder?: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tfields?: string;\n\t\tcount?: boolean;\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_query\",\n\t\t'Query rows from a subgraph table (max 200 rows). Filters support operators: \"amount.gte\": \"1000\", \"sender.neq\": \"SP...\", \"name.like\": \"%token%\". Available operators: eq, neq, gt, gte, lt, lte, like. To TAIL new rows (no streaming over MCP): sort=_id, order=desc for the latest, then poll forward with the filter {\"_id.gt\": \"<last _id seen>\"}, order=asc. Fetch one row by id with {\"_id\": \"<id>\"}. Public subgraphs are also keyless over HTTP at GET /v1/subgraphs/<name>/<table> — { rows, next_cursor, tip } envelope, resume with ?cursor=<next_cursor> + _order=asc|desc (no _offset/_sort on /v1); hand that URL to third parties.',\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\ttable: z.string().describe(\"Table name\"),\n\t\t\tfilters: z\n\t\t\t\t.record(z.string(), z.string())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Column filters — plain values or with operators (e.g. {\"amount.gte\": \"1000\", \"sender\": \"SP...\"})',\n\t\t\t\t),\n\t\t\tsort: z.string().optional().describe(\"Column to sort by\"),\n\t\t\torder: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort order\"),\n\t\t\tlimit: z\n\t\t\t\t.number()\n\t\t\t\t.max(200)\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Max rows (default 50, max 200)\"),\n\t\t\toffset: z.number().optional().describe(\"Offset for pagination\"),\n\t\t\tfields: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Comma-separated column list to return (e.g. \"sender,amount\")',\n\t\t\t\t),\n\t\t\tcount: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"If true, return row count instead of rows\"),\n\t\t},\n\t\tasync ({\n\t\t\tname,\n\t\t\ttable,\n\t\t\tfilters,\n\t\t\tsort,\n\t\t\torder,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tfields,\n\t\t\tcount,\n\t\t}) => {\n\t\t\tif (count) {\n\t\t\t\tconst result = await clientProvider().subgraphs.queryTableCount(\n\t\t\t\t\tname,\n\t\t\t\t\ttable,\n\t\t\t\t\t{ filters, sort, order },\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rows = await clientProvider().subgraphs.queryTable(name, table, {\n\t\t\t\tfilters,\n\t\t\t\tsort,\n\t\t\t\torder,\n\t\t\t\tlimit: limit ?? 50,\n\t\t\t\toffset,\n\t\t\t\tfields,\n\t\t\t});\n\t\t\tconst cap = limit ?? 50;\n\t\t\tconst result = withCap(\n\t\t\t\trows as Record<string, unknown>[],\n\t\t\t\tcap > 200 ? 200 : cap,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string; fromBlock?: number; toBlock?: number }>(\n\t\tserver,\n\t\t\"subgraphs_reindex\",\n\t\t\"Reindex a subgraph from a specific block range. Returns an operationId — check subgraphs_get (health) or the REST operations endpoint to track progress to completion.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tfromBlock: z\n\t\t\t\t.number()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Start block (defaults to beginning)\"),\n\t\t\ttoBlock: z.number().optional().describe(\"End block (defaults to latest)\"),\n\t\t},\n\t\tasync ({ name, fromBlock, toBlock }) => {\n\t\t\tconst result = await clientProvider().subgraphs.reindex(name, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string; fromBlock: number; toBlock: number }>(\n\t\tserver,\n\t\t\"subgraphs_backfill\",\n\t\t\"Backfill a subgraph over a block range. Non-destructive forward fill (does not drop existing data) — unlike subgraphs_reindex, and the only data-fill path for BYO subgraphs (reindex is blocked there). Both blocks required. Returns an operationId — check subgraphs_get (health) or the REST operations endpoint to track progress.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tfromBlock: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.describe(\"Start block (inclusive)\"),\n\t\t\ttoBlock: z.number().int().nonnegative().describe(\"End block (inclusive)\"),\n\t\t},\n\t\tasync ({ name, fromBlock, toBlock }) => {\n\t\t\tconst result = await clientProvider().subgraphs.backfill(name, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_stop\",\n\t\t\"Cancel an in-flight reindex or backfill operation for a subgraph. Returns the stop request status; check subgraphs_get (health) or the REST operations endpoint to confirm it reaches a terminal state.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.stop(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tresolved?: boolean;\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_gaps\",\n\t\t\"List indexing gaps (missing block ranges) for a subgraph. Each gap reports start/end/size, reason, and detected/resolved timestamps. Feed an unresolved gap's range into subgraphs_backfill to fill it. Defaults to unresolved gaps.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Subgraph name\"),\n\t\t\tlimit: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.positive()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Max gaps to return\"),\n\t\t\toffset: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Pagination offset\"),\n\t\t\tresolved: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Filter by resolved state (omit for unresolved only)\"),\n\t\t},\n\t\tasync ({ name, limit, offset, resolved }) => {\n\t\t\tconst result = await clientProvider().subgraphs.gaps(name, {\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\tresolved,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_delete\",\n\t\t\"Delete a subgraph permanently.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.delete(name);\n\t\t\treturn { content: [{ type: \"text\", text: result.message }] };\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tcode: string;\n\t\tstartBlock?: number;\n\t\tdatabaseUrl?: string;\n\t\tdryRun?: boolean;\n\t\tvisibility?: \"public\" | \"private\";\n\t}>(\n\t\tserver,\n\t\t\"subgraphs_deploy\",\n\t\t\"Deploy a subgraph from TypeScript code. Pass the full defineSubgraph() source — it will be bundled, validated, and deployed. Optional startBlock overrides the source definition for this deploy. Set dryRun to validate and preview the schema/DDL without writing anything. Set databaseUrl to deploy to your own Postgres (BYO data plane) — the server verifies the connection first; with dryRun it returns the DDL + grant script. A breaking BYO schema change is refused and returns a migration plan (drop + rebuild DDL) instead of deploying. Visibility defaults: managed deploys are public (anon-readable at /v1/subgraphs/<name>, name claimed in the global public namespace), BYO deploys are private. Call `subgraphs_reindex` separately if you need a forced reindex.\",\n\t\t{\n\t\t\tcode: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\"TypeScript source code containing a defineSubgraph() call\"),\n\t\t\tstartBlock: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.nonnegative()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Override the definition startBlock for this deploy\"),\n\t\t\tdatabaseUrl: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"BYO data plane: Postgres connection string to host the subgraph's schema and rows in your own database\",\n\t\t\t\t),\n\t\t\tdryRun: z\n\t\t\t\t.boolean()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Validate and preview the deploy (schema/DDL, BYO connection) without writing changes\",\n\t\t\t\t),\n\t\t\tvisibility: z\n\t\t\t\t.enum([\"public\", \"private\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Read visibility: public = anon /v1 reads + global name claim; private = owning account's key only. Defaults: managed → public, BYO → private.\",\n\t\t\t\t),\n\t\t},\n\t\tasync ({ code, startBlock, databaseUrl, dryRun, visibility }) => {\n\t\t\tconst bundled = await bundleSubgraphCode(code);\n\t\t\ttry {\n\t\t\t\tconst result = await clientProvider().subgraphs.deploy({\n\t\t\t\t\tname: bundled.name,\n\t\t\t\t\tversion: bundled.version,\n\t\t\t\t\tdescription: bundled.description,\n\t\t\t\t\tsources: bundled.sources,\n\t\t\t\t\tschema: bundled.schema,\n\t\t\t\t\thandlerCode: bundled.handlerCode,\n\t\t\t\t\tsourceCode: code,\n\t\t\t\t\t...(startBlock !== undefined ? { startBlock } : {}),\n\t\t\t\t\t...(databaseUrl !== undefined ? { databaseUrl } : {}),\n\t\t\t\t\t...(dryRun !== undefined ? { dryRun } : {}),\n\t\t\t\t\t...(visibility !== undefined ? { visibility } : {}),\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t\t};\n\t\t\t} catch (err) {\n\t\t\t\t// A refused BYO breaking change is an actionable result, not a failure:\n\t\t\t\t// defineTool would flatten the throw to {error:{message}} and drop the\n\t\t\t\t// migration plan, so surface reasons/diff/plan as a normal result.\n\t\t\t\tif (err instanceof ByoBreakingChangeError) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify(\n\t\t\t\t\t\t\t\t\t{ byoBreakingChange: true, ...err.details },\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_publish\",\n\t\t\"Make a subgraph publicly readable at /v1/subgraphs/<name> — anyone (or any agent) can read it without a key. Claims the name in the global public namespace; fails with PUBLIC_NAME_TAKEN if another account holds it.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.publish(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ name: string }>(\n\t\tserver,\n\t\t\"subgraphs_unpublish\",\n\t\t\"Make a subgraph private again — /v1 reads then require the owning account's bearer key, and the global public name claim is released.\",\n\t\t{ name: z.string().describe(\"Subgraph name\") },\n\t\tasync ({ name }) => {\n\t\t\tconst result = await clientProvider().subgraphs.unpublish(name);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n}\n",
16
16
  "import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type {\n\tChainTrigger,\n\tCreateSubscriptionRequest,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/sdk\";\nimport { CHAIN_TRIGGER_TYPES } from \"@secondlayer/shared\";\nimport { z } from \"zod/v4\";\nimport { getClient } from \"../lib/client.ts\";\nimport { defineTool } from \"../lib/tool.ts\";\n\ntype SubscriptionClientProvider = typeof getClient;\n\n/**\n * Subscription MCP tools — let agents list, configure, test, and replay\n * subgraph event subscriptions. Mirrors the HTTP API 1:1; structured\n * errors bubble through the SDK's ApiError.\n */\nexport function registerSubscriptionTools(\n\tserver: McpServer,\n\tclientProvider: SubscriptionClientProvider = getClient,\n) {\n\tdefineTool<Record<string, never>>(\n\t\tserver,\n\t\t\"subscriptions_list\",\n\t\t\"List all subscriptions for the current account. Returns summary fields (no secrets).\",\n\t\t{},\n\t\tasync () => {\n\t\t\tconst { data } = await clientProvider().subscriptions.list();\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_get\",\n\t\t\"Get full detail for a subscription (filter, auth, retry config, circuit state).\",\n\t\t{ id: z.string().describe(\"Subscription id\") },\n\t\tasync ({ id }) => {\n\t\t\tconst detail = await clientProvider().subscriptions.get(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(detail, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tname: string;\n\t\tsubgraphName?: string;\n\t\ttableName?: string;\n\t\ttriggers?: ChainTrigger[];\n\t\turl: string;\n\t\tformat?:\n\t\t\t| \"standard-webhooks\"\n\t\t\t| \"inngest\"\n\t\t\t| \"trigger\"\n\t\t\t| \"cloudflare\"\n\t\t\t| \"cloudevents\"\n\t\t\t| \"raw\";\n\t\truntime?: \"inngest\" | \"trigger\" | \"cloudflare\" | \"node\";\n\t\tfilter?: Record<string, unknown>;\n\t\tauthConfig?: Record<string, unknown>;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_create\",\n\t\t\"Create a subscription. Two kinds (mutually exclusive): a SUBGRAPH subscription fires on a subgraph table's rows (set subgraphName + tableName + optional filter); a CHAIN subscription fires on raw chain events with no subgraph (set triggers). Returns `signingSecret` ONCE — forward it to the user so they can wire it into their receiver.\",\n\t\t{\n\t\t\tname: z.string().describe(\"Human-readable name, unique per account\"),\n\t\t\tsubgraphName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Subgraph to subscribe to (subgraph subscription)\"),\n\t\t\ttableName: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Table within the subgraph (subgraph subscription)\"),\n\t\t\ttriggers: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\ttype: z.enum(CHAIN_TRIGGER_TYPES),\n\t\t\t\t\t\tcontractId: z.string().optional(),\n\t\t\t\t\t\tfunctionName: z.string().optional(),\n\t\t\t\t\t\tcaller: z.string().optional(),\n\t\t\t\t\t\tsender: z.string().optional(),\n\t\t\t\t\t\trecipient: z.string().optional(),\n\t\t\t\t\t\tassetIdentifier: z.string().optional(),\n\t\t\t\t\t\tdeployer: z.string().optional(),\n\t\t\t\t\t\tcontractName: z.string().optional(),\n\t\t\t\t\t\ttopic: z.string().optional(),\n\t\t\t\t\t\tlockedAddress: z.string().optional(),\n\t\t\t\t\t\ttrait: z.string().optional(),\n\t\t\t\t\t\tminAmount: z.union([z.string(), z.number()]).optional(),\n\t\t\t\t\t\tmaxAmount: z.union([z.string(), z.number()]).optional(),\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Chain triggers (chain subscription) — provide INSTEAD of subgraphName/tableName. Each targets a raw chain event/tx; string fields accept `*` wildcards, `trait` scopes to a SIP/trait. Per-type accepted fields: see the secondlayer://chain-triggers resource. Forward-looking: starts at chain tip, no backfill.\",\n\t\t\t\t),\n\t\t\turl: z.string().describe(\"Webhook URL\"),\n\t\t\tformat: z\n\t\t\t\t.enum([\n\t\t\t\t\t\"standard-webhooks\",\n\t\t\t\t\t\"inngest\",\n\t\t\t\t\t\"trigger\",\n\t\t\t\t\t\"cloudflare\",\n\t\t\t\t\t\"cloudevents\",\n\t\t\t\t\t\"raw\",\n\t\t\t\t])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Wire format (default standard-webhooks)\"),\n\t\t\truntime: z\n\t\t\t\t.enum([\"inngest\", \"trigger\", \"cloudflare\", \"node\"])\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Receiver runtime label (display only)\"),\n\t\t\tfilter: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Scalar filter DSL, e.g. {\"amount\": {\"gte\": 100}, \"sender\": \"SP...\"}',\n\t\t\t\t),\n\t\t\tauthConfig: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'Receiver auth sent with each delivery, e.g. {\"type\": \"bearer\", \"token\": \"...\"}',\n\t\t\t\t),\n\t\t},\n\t\tasync (input) => {\n\t\t\tconst res = await clientProvider().subscriptions.create(\n\t\t\t\tinput as CreateSubscriptionRequest,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tid: string;\n\t\tname?: string;\n\t\turl?: string;\n\t\tfilter?: Record<string, unknown>;\n\t\tauthConfig?: Record<string, unknown>;\n\t\tformat?:\n\t\t\t| \"standard-webhooks\"\n\t\t\t| \"inngest\"\n\t\t\t| \"trigger\"\n\t\t\t| \"cloudflare\"\n\t\t\t| \"cloudevents\"\n\t\t\t| \"raw\";\n\t\truntime?: \"inngest\" | \"trigger\" | \"cloudflare\" | \"node\" | null;\n\t\tmaxRetries?: number;\n\t\ttimeoutMs?: number;\n\t\tconcurrency?: number;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_update\",\n\t\t\"Patch a subscription (name, url, filter, authConfig, format, runtime, retry, timeout, concurrency).\",\n\t\t{\n\t\t\tid: z.string(),\n\t\t\tname: z.string().optional().describe(\"Rename the subscription\"),\n\t\t\turl: z.string().optional(),\n\t\t\tfilter: z.record(z.string(), z.unknown()).optional(),\n\t\t\tauthConfig: z\n\t\t\t\t.record(z.string(), z.unknown())\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Receiver auth sent with each delivery (bearer/etc.)\"),\n\t\t\tformat: z\n\t\t\t\t.enum([\n\t\t\t\t\t\"standard-webhooks\",\n\t\t\t\t\t\"inngest\",\n\t\t\t\t\t\"trigger\",\n\t\t\t\t\t\"cloudflare\",\n\t\t\t\t\t\"cloudevents\",\n\t\t\t\t\t\"raw\",\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\truntime: z\n\t\t\t\t.enum([\"inngest\", \"trigger\", \"cloudflare\", \"node\"])\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t\tmaxRetries: z.number().int().min(0).optional(),\n\t\t\ttimeoutMs: z.number().int().min(100).optional(),\n\t\t\tconcurrency: z.number().int().min(1).optional(),\n\t\t},\n\t\tasync ({ id, ...patch }) => {\n\t\t\tconst res = await clientProvider().subscriptions.update(\n\t\t\t\tid,\n\t\t\t\tpatch as UpdateSubscriptionRequest,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_delete\",\n\t\t\"Delete a subscription. Pending outbox rows are cascade-deleted.\",\n\t\t{ id: z.string() },\n\t\tasync ({ id }) => {\n\t\t\tconst res = await clientProvider().subscriptions.delete(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{ id: string }>(\n\t\tserver,\n\t\t\"subscriptions_test\",\n\t\t\"Send a one-off test webhook to a subscription's URL (built for its format, SSRF-guarded). Logged as a delivery row. Returns {ok, statusCode, error, durationMs, deliveryId}.\",\n\t\t{ id: z.string().describe(\"Subscription id\") },\n\t\tasync ({ id }) => {\n\t\t\tconst res = await clientProvider().subscriptions.test(id);\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n\n\tdefineTool<{\n\t\tid: string;\n\t\tfromBlock: number;\n\t\ttoBlock: number;\n\t\tforce?: string;\n\t}>(\n\t\tserver,\n\t\t\"subscriptions_replay\",\n\t\t\"Replay a block range for a subscription. Replays run at 10% of batch capacity — use sparingly. Pass `force` (a short idempotency suffix) to re-run a range that was already replayed.\",\n\t\t{\n\t\t\tid: z.string(),\n\t\t\tfromBlock: z.number().int().nonnegative(),\n\t\t\ttoBlock: z.number().int().nonnegative(),\n\t\t\tforce: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Idempotency suffix to force a duplicate replay of the range\",\n\t\t\t\t),\n\t\t},\n\t\tasync ({ id, fromBlock, toBlock, force }) => {\n\t\t\tconst res = await clientProvider().subscriptions.replay(id, {\n\t\t\t\tfromBlock,\n\t\t\t\ttoBlock,\n\t\t\t\t...(force !== undefined ? { force } : {}),\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(res, null, 2) }],\n\t\t\t};\n\t\t},\n\t);\n}\n"
17
17
  ],
18
- "mappings": "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",
19
- "debugId": "8F902CFB975F717764756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "BB9FD3EAA61892D564756E2164756E21",
20
20
  "names": []
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/mcp",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,11 +37,11 @@
37
37
  "dependencies": {
38
38
  "@modelcontextprotocol/sdk": "^1.27.1",
39
39
  "@secondlayer/bundler": "^0.3.7",
40
- "@secondlayer/scaffold": "^1.1.0",
41
- "@secondlayer/sdk": "^6.21.1",
42
- "@secondlayer/shared": "^6.30.0",
40
+ "@secondlayer/scaffold": "^1.3.0",
41
+ "@secondlayer/sdk": "^6.22.0",
42
+ "@secondlayer/shared": "^6.32.0",
43
43
  "@secondlayer/stacks": "^2.5.1",
44
- "@secondlayer/subgraphs": "^3.11.0",
44
+ "@secondlayer/subgraphs": "^3.14.0",
45
45
  "zod": "^4.3.6"
46
46
  },
47
47
  "devDependencies": {