@forgemeshlabs/utility-grid-mcp 0.1.3 → 0.1.5

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
@@ -1,10 +1,11 @@
1
1
  # ForgeMesh Utility Grid MCP
2
2
 
3
3
  [![M8ven Score](https://m8ven.ai/badge/mcp/forgemeshlabs-utility-grid-mcp-17smfq)](https://m8ven.ai/mcp/forgemeshlabs-utility-grid-mcp-17smfq)
4
+ [![mcpservers.org](https://mcpservers.org/badge.svg)](https://mcpservers.org/servers/forgemeshlabs/utility-grid-mcp)
4
5
 
5
6
  *A [ForgeMesh Labs](https://forgemesh.io) product.*
6
7
 
7
- Search and use more than 400 practical APIs without loading hundreds of tools into your agent. Utility Grid exposes six compact MCP tools for OCR, image and audio processing, web extraction, math, conversions, geodata, and more. Catalog discovery is free; API execution is paid per call in USDC on Base through [x402](https://x402.org). No account or API key is required.
8
+ Search and use more than 400 practical APIs without loading hundreds of tools into your agent. Utility Grid exposes seven compact MCP tools for OCR, image and audio processing, web extraction, math, conversions, geodata, and more. Catalog discovery is free; API execution is paid per call in USDC on Base through [x402](https://x402.org). No account or API key is required.
8
9
 
9
10
  Rather than exposing one MCP tool per route (unmanageable at this scale and growing), this server exposes a handful of **meta-tools**: browse/search the live catalog, fetch a route's exact call spec, then call any route generically. New routes on the upstream service show up automatically — nothing here is hardcoded to today's catalog.
10
11
 
@@ -30,6 +31,7 @@ Rather than exposing one MCP tool per route (unmanageable at this scale and grow
30
31
 
31
32
  | Tool | Cost | What it does |
32
33
  |---|---|---|
34
+ | `list_tools` | **free** | Every route with its live price plus a per-category summary — a plain fetch of `GET /menu`, no wallet |
33
35
  | `list_capabilities` | **free** | Category overview with route counts, or every route in one category |
34
36
  | `search_capabilities` | **free** | Keyword search across every route's path, id, and description |
35
37
  | `get_endpoint_spec` | **free** | A route's exact price, input schema, and worked request/response examples |
@@ -63,6 +65,16 @@ Prefer raw HTTP? The full agent-readable surface:
63
65
  - `https://x402.forgemesh.io/openapi.json` — OpenAPI 3.1 with x402 payment metadata, full input schemas, and worked examples for every route (this is what `list_capabilities`/`search_capabilities`/`get_endpoint_spec` read from, live, every call)
64
66
  - `https://x402.forgemesh.io/.well-known/x402.json` — x402 discovery manifest
65
67
 
68
+ ## Sponsored cards (Lulu Ads)
69
+
70
+ `list_tools` is a plain fetch of `GET https://x402.forgemesh.io/menu`. ForgeMesh attaches one disclosed [Lulu Ads](https://getlulu.dev) card to that free response server-side, as a plain labelled data field — never text the model could read as an instruction:
71
+
72
+ ```json
73
+ "sponsored": { "label": "Sponsored", "text": "...", "url": "https://..." }
74
+ ```
75
+
76
+ This package ships no ad credentials and makes no calls to the ads network; it passes the field through untouched. Paid tools never carry a card. Strip it with `delete result.sponsored`.
77
+
66
78
  ## FAQ
67
79
 
68
80
  **Do I need an account or API key?** No. x402 payments are the only credential, and only for the 3 paid tools.
package/index.js CHANGED
@@ -11,7 +11,7 @@ const { privateKeyToAccount } = require("viem/accounts");
11
11
  const { createPublicClient, http } = require("viem");
12
12
  const { base } = require("viem/chains");
13
13
 
14
- const VERSION = "0.1.2";
14
+ const VERSION = "0.1.4";
15
15
  const BASE_URL = (process.env.UTILITY_GRID_BASE_URL || "https://x402.forgemesh.io").replace(/\/$/, "");
16
16
  const BASE_RPC_URL = process.env.BASE_RPC_URL || "https://mainnet.base.org";
17
17
 
@@ -30,6 +30,14 @@ const CATEGORY_EXAMPLES =
30
30
 
31
31
  // --- discovery (free, no wallet needed) -----------------------------------
32
32
 
33
+ // list_tools is free: plain fetch of /menu, no wallet, never touches paidPost.
34
+ // The server may attach a labeled `sponsored` data field; pass it through untouched.
35
+ async function listTools() {
36
+ const res = await fetch(`${BASE_URL}/menu`);
37
+ if (!res.ok) throw new Error(`Failed to fetch menu: HTTP ${res.status}`);
38
+ return res.json();
39
+ }
40
+
33
41
  let discoveryCache = null; // { at: number, spec: object }
34
42
  const DISCOVERY_TTL_MS = 5 * 60 * 1000;
35
43
 
@@ -238,6 +246,18 @@ async function paidPost(ctx, path, body) {
238
246
  }
239
247
 
240
248
  const TOOLS = [
249
+ {
250
+ name: "list_tools",
251
+ annotations: {
252
+ readOnlyHint: true,
253
+ destructiveHint: false,
254
+ idempotentHint: true,
255
+ openWorldHint: true,
256
+ },
257
+ description:
258
+ "FREE — no wallet needed. Lists every Utility Grid route with its live price plus a per-category summary (route_count, price_range), so an agent can pick before paying. Fetches GET /menu with no payment.",
259
+ inputSchema: { type: "object", properties: {} },
260
+ },
241
261
  {
242
262
  name: "list_capabilities",
243
263
  annotations: {
@@ -363,6 +383,9 @@ async function main() {
363
383
  try {
364
384
  let data;
365
385
  switch (name) {
386
+ case "list_tools":
387
+ data = await listTools();
388
+ break;
366
389
  case "list_capabilities":
367
390
  data = await listCapabilities(args);
368
391
  break;
@@ -404,6 +427,7 @@ if (require.main === module) {
404
427
 
405
428
  module.exports = {
406
429
  TOOLS,
430
+ listTools,
407
431
  normalizePath,
408
432
  routeEntries,
409
433
  listCapabilities,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@forgemeshlabs/utility-grid-mcp",
3
- "version": "0.1.3",
4
- "description": "Discover and call 400+ practical APIs through six MCP tools. Search OCR, image, audio, web, math, conversion, and geodata utilities for free, then pay per call with x402 USDC on Base\u2014no account or API key.",
3
+ "version": "0.1.5",
4
+ "description": "Discover and call 400+ practical APIs through seven MCP tools. Search OCR, image, audio, web, math, conversion, and geodata utilities for free, then pay per call with x402 USDC on Base—no account or API key.",
5
5
  "main": "index.js",
6
6
  "bin": {
7
7
  "utility-grid-mcp": "index.js"
package/server.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.forgemeshlabs/utility-grid-mcp",
4
- "description": "Discover and call 400+ practical APIs through six MCP tools with free search and x402 payments.",
4
+ "description": "Discover and call 400+ practical APIs through seven MCP tools with free search and x402 payments.",
5
5
  "repository": {
6
6
  "url": "https://github.com/forgemeshlabs/utility-grid-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.3",
9
+ "version": "0.1.5",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@forgemeshlabs/utility-grid-mcp",
14
- "version": "0.1.3",
14
+ "version": "0.1.5",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
18
18
  "environmentVariables": [
19
19
  {
20
20
  "name": "WALLET_PRIVATE_KEY",
21
- "description": "Dedicated low-balance Base wallet private key for x402 USDC micropayments. Only required for the 3 paid tools (call_endpoint, daily_402, agent_service_directory) \u2014 the 3 discovery tools work without it. Never use your primary wallet.",
21
+ "description": "Dedicated low-balance Base wallet private key for x402 USDC micropayments. Only required for the 3 paid tools (call_endpoint, daily_402, agent_service_directory) — the 3 discovery tools work without it. Never use your primary wallet.",
22
22
  "isRequired": false,
23
23
  "isSecret": true,
24
24
  "format": "string"
@@ -44,4 +44,4 @@
44
44
  ]
45
45
  }
46
46
  ]
47
- }
47
+ }