@forgemeshlabs/utility-grid-mcp 0.1.0 → 0.1.2
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/CHANGELOG.md +11 -0
- package/Dockerfile +3 -3
- package/README.md +2 -2
- package/SECURITY.md +15 -0
- package/glama.json +1 -1
- package/index.js +37 -1
- package/package.json +6 -4
- package/server.json +3 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
- Updated MCP dependencies to resolve security advisories.
|
|
6
|
+
- Added Glama, Docker, Smithery, and official MCP Registry metadata.
|
|
7
|
+
- Clarified free discovery and paid execution behavior.
|
|
8
|
+
|
|
9
|
+
## 0.1.0
|
|
10
|
+
|
|
11
|
+
- Initial release with six tools for discovering and calling Utility Grid APIs.
|
package/Dockerfile
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
FROM node:
|
|
1
|
+
FROM node:22-bookworm-slim
|
|
2
2
|
|
|
3
3
|
WORKDIR /app
|
|
4
4
|
|
|
5
5
|
COPY package.json package-lock.json ./
|
|
6
6
|
RUN npm ci --omit=dev
|
|
7
7
|
|
|
8
|
-
COPY index.js README.md LICENSE server.json glama.json GLAMA.md smithery.yaml ./
|
|
8
|
+
COPY index.js README.md LICENSE SECURITY.md CHANGELOG.md server.json glama.json GLAMA.md smithery.yaml ./
|
|
9
9
|
RUN chmod +x /app/index.js
|
|
10
10
|
|
|
11
11
|
ENV NODE_ENV=production \
|
|
@@ -13,4 +13,4 @@ ENV NODE_ENV=production \
|
|
|
13
13
|
|
|
14
14
|
USER node
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
CMD ["node", "index.js"]
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# ForgeMesh Utility Grid
|
|
1
|
+
# ForgeMesh Utility Grid MCP
|
|
2
2
|
|
|
3
3
|
*A [ForgeMesh Labs](https://forgemesh.io) product.*
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
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.
|
|
6
6
|
|
|
7
7
|
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.
|
|
8
8
|
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting a vulnerability
|
|
4
|
+
|
|
5
|
+
Please report security issues privately through GitHub's security advisory
|
|
6
|
+
feature for this repository. Do not open a public issue for a suspected
|
|
7
|
+
vulnerability.
|
|
8
|
+
|
|
9
|
+
Never include wallet private keys, payment signatures, API credentials, or
|
|
10
|
+
other secrets in reports, logs, screenshots, or example configuration.
|
|
11
|
+
|
|
12
|
+
## Wallet safety
|
|
13
|
+
|
|
14
|
+
Paid tools require a dedicated, low-balance Base wallet. Never use a primary
|
|
15
|
+
wallet. The three discovery tools work without any wallet configuration.
|
package/glama.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://glama.ai/mcp/schemas/server.json",
|
|
3
3
|
"name": "@forgemeshlabs/utility-grid-mcp",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Discover and call 400+ practical APIs through six MCP tools. Search the catalog free, then pay per call with x402 USDC on Base.",
|
|
5
5
|
"maintainers": [
|
|
6
6
|
"clawdbotworker"
|
|
7
7
|
],
|
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.
|
|
14
|
+
const VERSION = "0.1.2";
|
|
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
|
|
|
@@ -240,6 +240,12 @@ async function paidPost(ctx, path, body) {
|
|
|
240
240
|
const TOOLS = [
|
|
241
241
|
{
|
|
242
242
|
name: "list_capabilities",
|
|
243
|
+
annotations: {
|
|
244
|
+
readOnlyHint: true,
|
|
245
|
+
destructiveHint: false,
|
|
246
|
+
idempotentHint: true,
|
|
247
|
+
openWorldHint: true,
|
|
248
|
+
},
|
|
243
249
|
description:
|
|
244
250
|
`FREE — no wallet needed. Browse the ForgeMesh Utility Grid catalog (415+ POST routes and growing, covering ${CATEGORY_EXAMPLES}). Call with no arguments for a category overview with route counts, or pass a category to list every route in it with price and description. Always reads the live /openapi.json — never a stale/hardcoded list.`,
|
|
245
251
|
inputSchema: {
|
|
@@ -251,6 +257,12 @@ const TOOLS = [
|
|
|
251
257
|
},
|
|
252
258
|
{
|
|
253
259
|
name: "search_capabilities",
|
|
260
|
+
annotations: {
|
|
261
|
+
readOnlyHint: true,
|
|
262
|
+
destructiveHint: false,
|
|
263
|
+
idempotentHint: true,
|
|
264
|
+
openWorldHint: true,
|
|
265
|
+
},
|
|
254
266
|
description:
|
|
255
267
|
"FREE — no wallet needed. Keyword search across every route's path, operation id, and description (e.g. 'chess', 'timezone', 'background removal'). Use this when you don't know the exact route name or category.",
|
|
256
268
|
inputSchema: {
|
|
@@ -264,6 +276,12 @@ const TOOLS = [
|
|
|
264
276
|
},
|
|
265
277
|
{
|
|
266
278
|
name: "get_endpoint_spec",
|
|
279
|
+
annotations: {
|
|
280
|
+
readOnlyHint: true,
|
|
281
|
+
destructiveHint: false,
|
|
282
|
+
idempotentHint: true,
|
|
283
|
+
openWorldHint: true,
|
|
284
|
+
},
|
|
267
285
|
description:
|
|
268
286
|
"FREE — no wallet needed. Full call spec for one route: price, input JSON schema, a worked request example, and a worked response example, straight from the live OpenAPI discovery doc. Pass the route path (with or without a leading slash, e.g. 'chess-moves' or '/chess-moves'). Use this before call_endpoint to know exactly what body to send.",
|
|
269
287
|
inputSchema: {
|
|
@@ -276,6 +294,12 @@ const TOOLS = [
|
|
|
276
294
|
},
|
|
277
295
|
{
|
|
278
296
|
name: "call_endpoint",
|
|
297
|
+
annotations: {
|
|
298
|
+
readOnlyHint: true,
|
|
299
|
+
destructiveHint: false,
|
|
300
|
+
idempotentHint: false,
|
|
301
|
+
openWorldHint: true,
|
|
302
|
+
},
|
|
279
303
|
description:
|
|
280
304
|
"PAID (price varies by route, $0.001-$0.05) — the generic way to call ANY route in the Utility Grid. Pass the route path and a JSON body matching its input schema (use get_endpoint_spec first if unsure). Handles the full x402 payment flow automatically: fetches the 402 challenge, signs a USDC payment on Base, retries, and returns the result. Requires WALLET_PRIVATE_KEY.",
|
|
281
305
|
inputSchema: {
|
|
@@ -289,6 +313,12 @@ const TOOLS = [
|
|
|
289
313
|
},
|
|
290
314
|
{
|
|
291
315
|
name: "daily_402",
|
|
316
|
+
annotations: {
|
|
317
|
+
readOnlyHint: true,
|
|
318
|
+
destructiveHint: false,
|
|
319
|
+
idempotentHint: false,
|
|
320
|
+
openWorldHint: true,
|
|
321
|
+
},
|
|
292
322
|
description:
|
|
293
323
|
"PAID ($0.001) — the Daily 402: one featured x402 endpoint per UTC day, rotated deterministically through every paid route in the 12-service ForgeMesh fleet (500+ routes). Returns what it does, its price, input schema, and a worked example. Optional date override to replay a past day's pick. Requires WALLET_PRIVATE_KEY.",
|
|
294
324
|
inputSchema: {
|
|
@@ -300,6 +330,12 @@ const TOOLS = [
|
|
|
300
330
|
},
|
|
301
331
|
{
|
|
302
332
|
name: "agent_service_directory",
|
|
333
|
+
annotations: {
|
|
334
|
+
readOnlyHint: true,
|
|
335
|
+
destructiveHint: false,
|
|
336
|
+
idempotentHint: false,
|
|
337
|
+
openWorldHint: true,
|
|
338
|
+
},
|
|
303
339
|
description:
|
|
304
340
|
"PAID ($0.05) — machine-readable registry of every production x402 service in the ForgeMesh fleet: name, category, live route count, and price range per service. Useful for an agent deciding which paid tool/service to reach for next. Optional category filter (onchain-intel, voice, travel, econ-intel, commerce, infra, media, utility-grid). Requires WALLET_PRIVATE_KEY.",
|
|
305
341
|
inputSchema: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgemeshlabs/utility-grid-mcp",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.2",
|
|
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—no account or API key.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"utility-grid-mcp": "index.js"
|
|
@@ -15,13 +15,15 @@
|
|
|
15
15
|
"Dockerfile",
|
|
16
16
|
".dockerignore",
|
|
17
17
|
"smithery.yaml",
|
|
18
|
+
"SECURITY.md",
|
|
19
|
+
"CHANGELOG.md",
|
|
18
20
|
"LICENSE"
|
|
19
21
|
],
|
|
20
22
|
"mcpName": "io.github.forgemeshlabs/utility-grid-mcp",
|
|
21
23
|
"scripts": {
|
|
22
24
|
"start": "node index.js",
|
|
23
25
|
"build": "echo \"no build step required\"",
|
|
24
|
-
"test": "node --test test
|
|
26
|
+
"test": "node --test test/*.test.js"
|
|
25
27
|
},
|
|
26
28
|
"keywords": [
|
|
27
29
|
"mcp",
|
|
@@ -50,7 +52,7 @@
|
|
|
50
52
|
"node": ">=20"
|
|
51
53
|
},
|
|
52
54
|
"dependencies": {
|
|
53
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
55
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
54
56
|
"@x402/core": "^2.17.0",
|
|
55
57
|
"@x402/evm": "^2.17.0",
|
|
56
58
|
"viem": "^2.0.0"
|
package/server.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
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": "
|
|
4
|
+
"description": "Discover and call 400+ practical APIs through six 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.
|
|
9
|
+
"version": "0.1.2",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@forgemeshlabs/utility-grid-mcp",
|
|
14
|
-
"version": "0.1.
|
|
14
|
+
"version": "0.1.2",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|