subgraph-registry-mcp 0.9.2 → 0.9.3

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/data/openapi.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "Subgraph Registry",
5
5
  "description": "Agent-friendly subgraph discovery on The Graph Network. 14,700+ classified subgraphs with semantic search, reliability scoring, schema-evolution tracking, and x402 query URLs ($0.01 USDC on Base, no API key).",
6
- "version": "0.8.31",
6
+ "version": "0.9.3",
7
7
  "license": {
8
8
  "name": "MIT"
9
9
  },
@@ -23,7 +23,7 @@
23
23
  "post": {
24
24
  "operationId": "tool_search_subgraphs",
25
25
  "summary": "Search and filter the classified subgraph registry (15,500+ subgraphs).",
26
- "description": "Search and filter the classified subgraph registry (15,500+ subgraphs). Filter by domain (defi, nfts, dao, gaming, identity, infrastructure, social, analytics), network (mainnet, arbitrum-one, base, matic, bsc, optimism, avalanche), protocol_type (dex, lending, bridge, staking, options, perpetuals, nft-marketplace, yield-aggregator, governance, name-service), canonical entity type (liquidity_pool, trade, token, position, vault, loan, collateral, liquidation, nft_collection, nft_item, nft_sale, proposal, delegate, domain_name, account, transaction, daily_snapshot, hourly_snapshot), or free-text keyword. Returns subgraphs ranked by reliability score. Each result includes query_url_x402 (POST GraphQL and pay $0.01 USDC on Base per query — no API key needed) and a legacy query_url (Studio API key required).",
26
+ "description": "Search and filter the classified subgraph registry (15,500+ subgraphs). Filter by domain (defi, nfts, dao, gaming, identity, infrastructure, social, analytics), network (mainnet, arbitrum-one, base, matic, bsc, optimism, avalanche), protocol_type (dex, lending, bridge, staking, options, perpetuals, nft-marketplace, yield-aggregator, governance, name-service), canonical entity type (liquidity_pool, trade, token, position, vault, loan, collateral, liquidation, nft_collection, nft_item, nft_sale, proposal, delegate, domain_name, account, transaction, daily_snapshot, hourly_snapshot), or free-text keyword. Returns subgraphs ranked by reliability score. Each result includes query_url_x402 (POST GraphQL and pay $0.01 USDC on Base per query — no API key needed) and a legacy query_url (Studio API key required), plus age_days and maturity (new | emerging | established). Because reliability_score is cumulative it structurally favours older deployments, so a separate `emerging` list carries recent matches that ranked below the main cut for age rather than quality — read `emerging_caveat` before offering one to a user.",
27
27
  "tags": [
28
28
  "mcp-tools"
29
29
  ],
@@ -57,12 +57,27 @@
57
57
  },
58
58
  "min_reliability": {
59
59
  "type": "number",
60
- "description": "Minimum reliability score (0-1). Higher = more query fees, volume, curation signal, and indexer allocation."
60
+ "description": "Minimum reliability score (0-1). Higher = more query fees, volume, curation signal, and indexer allocation. NOTE: all four inputs are cumulative, so this score rises with age — setting a floor here filters out good recent subgraphs along with bad ones."
61
61
  },
62
62
  "limit": {
63
63
  "type": "integer",
64
64
  "description": "Max results to return (default: 20)",
65
65
  "default": 20
66
+ },
67
+ "include_unserved": {
68
+ "type": "boolean",
69
+ "description": "Include subgraphs with 0 active indexer allocations (returns 'no allocations' on query). Default false.",
70
+ "default": false
71
+ },
72
+ "include_denied": {
73
+ "type": "boolean",
74
+ "description": "Include curation-denied deployments (deniedAt > 0 — denied indexing rewards, typically spam, duplicates or deprecations). Default false. When true, each result carries denied: true so the choice stays visible.",
75
+ "default": false
76
+ },
77
+ "include_testnets": {
78
+ "type": "boolean",
79
+ "description": "Include testnet deployments (sepolia, goerli, holesky, chapel, fuji, mumbai, amoy, *-testnet). Default false — a testnet twin's text is near-identical to its mainnet original, so it competes for the top slot without being the thing anyone wanted. Ignored when you explicitly request a testnet network, so network:\"sepolia\" still works. Each result carries testnet: true|false.",
80
+ "default": false
66
81
  }
67
82
  }
68
83
  }
@@ -282,6 +297,16 @@
282
297
  "description": "Include subgraphs with 0 active indexer allocations (returns 'no allocations' on query). Default false.",
283
298
  "default": false
284
299
  },
300
+ "include_denied": {
301
+ "type": "boolean",
302
+ "description": "Include curation-denied deployments (deniedAt > 0 — denied indexing rewards, typically spam, duplicates or deprecations). Default false. When true, each result carries denied: true so the choice stays visible.",
303
+ "default": false
304
+ },
305
+ "include_testnets": {
306
+ "type": "boolean",
307
+ "description": "Include testnet deployments (sepolia, goerli, holesky, chapel, fuji, mumbai, amoy, *-testnet). Default false — a testnet twin's text is near-identical to its mainnet original, so it competes for the top slot without being the thing anyone wanted. Ignored when you explicitly request a testnet network, so network:\"sepolia\" still works. Each result carries testnet: true|false.",
308
+ "default": false
309
+ },
285
310
  "domain": {
286
311
  "type": "string",
287
312
  "description": "Pre-filter by domain (defi, nfts, dao, gaming, identity, infrastructure, social, analytics)"
@@ -433,6 +458,38 @@
433
458
  }
434
459
  }
435
460
  },
461
+ "/graphql": {
462
+ "post": {
463
+ "operationId": "rest_post_graphql",
464
+ "summary": "payql compatibility — search results in subgraphMetadataSearch shape",
465
+ "tags": [
466
+ "rest"
467
+ ],
468
+ "responses": {
469
+ "200": {
470
+ "description": "{ data: { subgraphMetadataSearch: [...] } }",
471
+ "content": {
472
+ "application/json": {
473
+ "schema": {
474
+ "type": "object",
475
+ "description": "{ data: { subgraphMetadataSearch: [...] } }"
476
+ }
477
+ }
478
+ }
479
+ },
480
+ "404": {
481
+ "description": "Not found",
482
+ "content": {
483
+ "application/json": {
484
+ "schema": {
485
+ "$ref": "#/components/schemas/ToolError"
486
+ }
487
+ }
488
+ }
489
+ }
490
+ }
491
+ }
492
+ },
436
493
  "/.well-known/subgraph/{id}.jsonld": {
437
494
  "get": {
438
495
  "operationId": "rest_get_well_known_subgraph_id_jsonld",
package/openapi.yaml CHANGED
@@ -5,7 +5,7 @@ openapi: "3.1.0"
5
5
  info:
6
6
  title: "Subgraph Registry"
7
7
  description: "Agent-friendly subgraph discovery on The Graph Network. 14,700+ classified subgraphs with semantic search, reliability scoring, schema-evolution tracking, and x402 query URLs ($0.01 USDC on Base, no API key)."
8
- version: "0.8.31"
8
+ version: "0.9.3"
9
9
  license:
10
10
  name: "MIT"
11
11
  contact:
@@ -19,7 +19,7 @@ paths:
19
19
  post:
20
20
  operationId: "tool_search_subgraphs"
21
21
  summary: "Search and filter the classified subgraph registry (15,500+ subgraphs)."
22
- description: "Search and filter the classified subgraph registry (15,500+ subgraphs). Filter by domain (defi, nfts, dao, gaming, identity, infrastructure, social, analytics), network (mainnet, arbitrum-one, base, matic, bsc, optimism, avalanche), protocol_type (dex, lending, bridge, staking, options, perpetuals, nft-marketplace, yield-aggregator, governance, name-service), canonical entity type (liquidity_pool, trade, token, position, vault, loan, collateral, liquidation, nft_collection, nft_item, nft_sale, proposal, delegate, domain_name, account, transaction, daily_snapshot, hourly_snapshot), or free-text keyword. Returns subgraphs ranked by reliability score. Each result includes query_url_x402 (POST GraphQL and pay $0.01 USDC on Base per query — no API key needed) and a legacy query_url (Studio API key required)."
22
+ description: "Search and filter the classified subgraph registry (15,500+ subgraphs). Filter by domain (defi, nfts, dao, gaming, identity, infrastructure, social, analytics), network (mainnet, arbitrum-one, base, matic, bsc, optimism, avalanche), protocol_type (dex, lending, bridge, staking, options, perpetuals, nft-marketplace, yield-aggregator, governance, name-service), canonical entity type (liquidity_pool, trade, token, position, vault, loan, collateral, liquidation, nft_collection, nft_item, nft_sale, proposal, delegate, domain_name, account, transaction, daily_snapshot, hourly_snapshot), or free-text keyword. Returns subgraphs ranked by reliability score. Each result includes query_url_x402 (POST GraphQL and pay $0.01 USDC on Base per query — no API key needed) and a legacy query_url (Studio API key required), plus age_days and maturity (new | emerging | established). Because reliability_score is cumulative it structurally favours older deployments, so a separate `emerging` list carries recent matches that ranked below the main cut for age rather than quality — read `emerging_caveat` before offering one to a user."
23
23
  tags:
24
24
  - "mcp-tools"
25
25
  requestBody:
@@ -47,11 +47,23 @@ paths:
47
47
  description: "Filter by canonical entity: liquidity_pool, trade, token, position, vault, loan, etc."
48
48
  min_reliability:
49
49
  type: "number"
50
- description: "Minimum reliability score (0-1). Higher = more query fees, volume, curation signal, and indexer allocation."
50
+ description: "Minimum reliability score (0-1). Higher = more query fees, volume, curation signal, and indexer allocation. NOTE: all four inputs are cumulative, so this score rises with age — setting a floor here filters out good recent subgraphs along with bad ones."
51
51
  limit:
52
52
  type: "integer"
53
53
  description: "Max results to return (default: 20)"
54
54
  default: 20
55
+ include_unserved:
56
+ type: "boolean"
57
+ description: "Include subgraphs with 0 active indexer allocations (returns 'no allocations' on query). Default false."
58
+ default: false
59
+ include_denied:
60
+ type: "boolean"
61
+ description: "Include curation-denied deployments (deniedAt > 0 — denied indexing rewards, typically spam, duplicates or deprecations). Default false. When true, each result carries denied: true so the choice stays visible."
62
+ default: false
63
+ include_testnets:
64
+ type: "boolean"
65
+ description: "Include testnet deployments (sepolia, goerli, holesky, chapel, fuji, mumbai, amoy, *-testnet). Default false — a testnet twin's text is near-identical to its mainnet original, so it competes for the top slot without being the thing anyone wanted. Ignored when you explicitly request a testnet network, so network:\"sepolia\" still works. Each result carries testnet: true|false."
66
+ default: false
55
67
  responses:
56
68
  "200":
57
69
  description: "Tool result (JSON-encoded)"
@@ -194,6 +206,14 @@ paths:
194
206
  type: "boolean"
195
207
  description: "Include subgraphs with 0 active indexer allocations (returns 'no allocations' on query). Default false."
196
208
  default: false
209
+ include_denied:
210
+ type: "boolean"
211
+ description: "Include curation-denied deployments (deniedAt > 0 — denied indexing rewards, typically spam, duplicates or deprecations). Default false. When true, each result carries denied: true so the choice stays visible."
212
+ default: false
213
+ include_testnets:
214
+ type: "boolean"
215
+ description: "Include testnet deployments (sepolia, goerli, holesky, chapel, fuji, mumbai, amoy, *-testnet). Default false — a testnet twin's text is near-identical to its mainnet original, so it competes for the top slot without being the thing anyone wanted. Ignored when you explicitly request a testnet network, so network:\"sepolia\" still works. Each result carries testnet: true|false."
216
+ default: false
197
217
  domain:
198
218
  type: "string"
199
219
  description: "Pre-filter by domain (defi, nfts, dao, gaming, identity, infrastructure, social, analytics)"
@@ -287,6 +307,26 @@ paths:
287
307
  application/json:
288
308
  schema:
289
309
  "$ref": "#/components/schemas/ToolError"
310
+ "/graphql":
311
+ post:
312
+ operationId: "rest_post_graphql"
313
+ summary: "payql compatibility — search results in subgraphMetadataSearch shape"
314
+ tags:
315
+ - "rest"
316
+ responses:
317
+ "200":
318
+ description: "{ data: { subgraphMetadataSearch: [...] } }"
319
+ content:
320
+ application/json:
321
+ schema:
322
+ type: "object"
323
+ description: "{ data: { subgraphMetadataSearch: [...] } }"
324
+ "404":
325
+ description: "Not found"
326
+ content:
327
+ application/json:
328
+ schema:
329
+ "$ref": "#/components/schemas/ToolError"
290
330
  "/.well-known/subgraph/{id}.jsonld":
291
331
  get:
292
332
  operationId: "rest_get_well_known_subgraph_id_jsonld"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "subgraph-registry-mcp",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "mcpName": "io.github.PaulieB14/subgraph-registry-mcp",
5
5
  "description": "MCP server for agent-friendly subgraph discovery on The Graph Network. 15,330 classified subgraphs with x402 query URLs ($0.01 USDC on Base, no API key required), reliability scoring, and protocol classification.",
6
6
  "type": "module",
@@ -18,7 +18,9 @@
18
18
  "start": "node src/index.js",
19
19
  "start:http": "node src/index.js --http",
20
20
  "start:http-only": "node src/index.js --http-only",
21
- "test": "node --test test/"
21
+ "test": "node --test test/",
22
+ "sync:server": "node scripts/sync-server-json.js",
23
+ "version": "node scripts/sync-server-json.js && node scripts/gen-openapi.js && git add server.json openapi.yaml data/openapi.json"
22
24
  },
23
25
  "keywords": [
24
26
  "mcp",
package/src/index.js CHANGED
@@ -1640,6 +1640,14 @@ export const REST_ROUTES = [
1640
1640
  required: ["status", "subgraphs"],
1641
1641
  },
1642
1642
  },
1643
+ {
1644
+ method: "post",
1645
+ path: "/graphql",
1646
+ summary: "payql compatibility — search results in subgraphMetadataSearch shape",
1647
+ description:
1648
+ "Answers a `subgraphMetadataSearch` query in The Graph network subgraph's shape, so payql (PAYQL_REGISTRY_URL) can use this registry as a free discovery source with no change on its side. Only the `text` and `first` variables are read; results come from the same index search_subgraphs uses.",
1649
+ response: { type: "object", description: "{ data: { subgraphMetadataSearch: [...] } }" },
1650
+ },
1643
1651
  {
1644
1652
  method: "get",
1645
1653
  path: "/.well-known/subgraph/{id}.jsonld",