@synctek/forgeos 2.0.0 → 2.1.1
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 +177 -268
- package/dist/cli/commands/evidence.d.ts.map +1 -1
- package/dist/cli/commands/evidence.js +18 -0
- package/dist/cli/commands/evidence.js.map +1 -1
- package/dist/cli/commands/federation.d.ts +9 -4
- package/dist/cli/commands/federation.d.ts.map +1 -1
- package/dist/cli/commands/federation.js +73 -30
- package/dist/cli/commands/federation.js.map +1 -1
- package/dist/cli/commands/gate.d.ts.map +1 -1
- package/dist/cli/commands/gate.js +23 -0
- package/dist/cli/commands/gate.js.map +1 -1
- package/dist/cli/commands/review.d.ts.map +1 -1
- package/dist/cli/commands/review.js +25 -0
- package/dist/cli/commands/review.js.map +1 -1
- package/dist/cli/index.d.ts +4 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/handlers.js +17 -0
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/http-server.d.ts.map +1 -1
- package/dist/mcp/http-server.js +3 -2
- package/dist/mcp/http-server.js.map +1 -1
- package/dist/mcp/index.js +2 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/shared/types.d.ts +15 -1
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/version.d.ts +2 -0
- package/dist/shared/version.d.ts.map +1 -0
- package/dist/shared/version.js +4 -0
- package/dist/shared/version.js.map +1 -0
- package/dist/trust/index.d.ts +1 -1
- package/dist/trust/index.js +1 -1
- package/package.json +12 -6
- package/dist/client.d.ts +0 -46
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -146
- package/dist/client.js.map +0 -1
- package/dist/handlers.d.ts +0 -11
- package/dist/handlers.d.ts.map +0 -1
- package/dist/handlers.js +0 -424
- package/dist/handlers.js.map +0 -1
- package/dist/http-server.d.ts +0 -25
- package/dist/http-server.d.ts.map +0 -1
- package/dist/http-server.js +0 -246
- package/dist/http-server.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -40
- package/dist/index.js.map +0 -1
- package/dist/tools.d.ts +0 -944
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -513
- package/dist/tools.js.map +0 -1
- package/dist/types.d.ts +0 -183
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/http-server.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* ForgeOS MCP — HTTP/SSE Transport (Hono)
|
|
4
|
-
*
|
|
5
|
-
* Exposes three endpoints on /mcp:
|
|
6
|
-
* POST /mcp — StreamableHTTP main channel (JSON-RPC over HTTP)
|
|
7
|
-
* GET /mcp — SSE fallback (server-to-client event stream)
|
|
8
|
-
* DELETE /mcp — Session cleanup
|
|
9
|
-
* GET /health — Liveness probe
|
|
10
|
-
*
|
|
11
|
-
* Security design (BIS Condition — BLOCKING):
|
|
12
|
-
* API key is read from the Authorization: Bearer <key> header on EVERY
|
|
13
|
-
* request. It is threaded into ForgeOSClient as a constructor parameter.
|
|
14
|
-
* We NEVER mutate process.env and NEVER hold a shared client singleton
|
|
15
|
-
* across requests. Each MCP Server instance is created per-request so
|
|
16
|
-
* there is no cross-request state leakage.
|
|
17
|
-
*
|
|
18
|
-
* Rate limiting:
|
|
19
|
-
* Simple in-memory token-bucket per API key (or per IP when no key).
|
|
20
|
-
* Max 60 requests / 60-second window. Configurable via env vars:
|
|
21
|
-
* RATE_LIMIT_MAX (default 60)
|
|
22
|
-
* RATE_LIMIT_WINDOW_MS (default 60000)
|
|
23
|
-
*/
|
|
24
|
-
import { Hono } from "hono";
|
|
25
|
-
import { cors } from "hono/cors";
|
|
26
|
-
import { serve } from "@hono/node-server";
|
|
27
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
28
|
-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
29
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
30
|
-
import { randomUUID } from "node:crypto";
|
|
31
|
-
import { TOOLS } from "./tools.js";
|
|
32
|
-
import { createHandleTool } from "./handlers.js";
|
|
33
|
-
import { ForgeOSClient } from "./client.js";
|
|
34
|
-
// ---------------------------------------------------------------------------
|
|
35
|
-
// Configuration
|
|
36
|
-
// ---------------------------------------------------------------------------
|
|
37
|
-
const HTTP_PORT = Number(process.env.MCP_HTTP_PORT ?? 8401);
|
|
38
|
-
const RATE_LIMIT_MAX = Number(process.env.RATE_LIMIT_MAX ?? 60);
|
|
39
|
-
const RATE_LIMIT_WINDOW_MS = Number(process.env.RATE_LIMIT_WINDOW_MS ?? 60_000);
|
|
40
|
-
const rateBuckets = new Map();
|
|
41
|
-
function checkRateLimit(identityKey) {
|
|
42
|
-
const now = Date.now();
|
|
43
|
-
const bucket = rateBuckets.get(identityKey);
|
|
44
|
-
if (!bucket || now - bucket.windowStart > RATE_LIMIT_WINDOW_MS) {
|
|
45
|
-
rateBuckets.set(identityKey, { count: 1, windowStart: now });
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
if (bucket.count >= RATE_LIMIT_MAX) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
bucket.count++;
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
// Purge stale buckets every 5 minutes to prevent unbounded memory growth
|
|
55
|
-
setInterval(() => {
|
|
56
|
-
const now = Date.now();
|
|
57
|
-
for (const [key, bucket] of rateBuckets) {
|
|
58
|
-
if (now - bucket.windowStart > RATE_LIMIT_WINDOW_MS * 2) {
|
|
59
|
-
rateBuckets.delete(key);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}, 5 * 60_000).unref();
|
|
63
|
-
// ---------------------------------------------------------------------------
|
|
64
|
-
// MCP Server factory — one fresh Server per request
|
|
65
|
-
// ---------------------------------------------------------------------------
|
|
66
|
-
function fail(error) {
|
|
67
|
-
return {
|
|
68
|
-
content: [
|
|
69
|
-
{
|
|
70
|
-
type: "text",
|
|
71
|
-
text: JSON.stringify({ ok: false, error }, null, 2),
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
isError: true,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Create a fully wired MCP Server instance bound to the given API key.
|
|
79
|
-
* The ForgeOSClient is constructed here with the per-request key — no
|
|
80
|
-
* shared state, no env mutation.
|
|
81
|
-
*/
|
|
82
|
-
function createMcpServer(apiKey) {
|
|
83
|
-
const forgeClient = new ForgeOSClient(process.env.FORGEOS_ENGINE_URL, apiKey);
|
|
84
|
-
const handleTool = createHandleTool(forgeClient);
|
|
85
|
-
const server = new Server({ name: "forgeos", version: "0.1.0" }, { capabilities: { tools: {} } });
|
|
86
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
87
|
-
tools: TOOLS,
|
|
88
|
-
}));
|
|
89
|
-
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
90
|
-
const name = req.params.name;
|
|
91
|
-
const args = (req.params.arguments ?? {});
|
|
92
|
-
try {
|
|
93
|
-
return await handleTool(name, args);
|
|
94
|
-
}
|
|
95
|
-
catch (e) {
|
|
96
|
-
return fail(e?.message ?? String(e));
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
return server;
|
|
100
|
-
}
|
|
101
|
-
// ---------------------------------------------------------------------------
|
|
102
|
-
// Session registry — maps session ID → transport (for DELETE cleanup)
|
|
103
|
-
// ---------------------------------------------------------------------------
|
|
104
|
-
const sessions = new Map();
|
|
105
|
-
// ---------------------------------------------------------------------------
|
|
106
|
-
// Hono app
|
|
107
|
-
// ---------------------------------------------------------------------------
|
|
108
|
-
const app = new Hono();
|
|
109
|
-
// CORS — allow any origin (clients are local AI agents or Claude Code)
|
|
110
|
-
app.use("*", cors({
|
|
111
|
-
origin: "*",
|
|
112
|
-
allowMethods: ["GET", "POST", "DELETE", "OPTIONS"],
|
|
113
|
-
allowHeaders: ["Content-Type", "Authorization", "Mcp-Session-Id"],
|
|
114
|
-
exposeHeaders: ["Mcp-Session-Id"],
|
|
115
|
-
maxAge: 86400,
|
|
116
|
-
}));
|
|
117
|
-
// Health probe — no auth required
|
|
118
|
-
app.get("/health", (c) => {
|
|
119
|
-
return c.json({
|
|
120
|
-
status: "ok",
|
|
121
|
-
service: "forgeos-mcp-http",
|
|
122
|
-
version: "0.1.0",
|
|
123
|
-
activeSessions: sessions.size,
|
|
124
|
-
timestamp: new Date().toISOString(),
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
// ---------------------------------------------------------------------------
|
|
128
|
-
// Auth + rate-limit middleware for /mcp routes
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
app.use("/mcp", async (c, next) => {
|
|
131
|
-
// Extract API key from Authorization: Bearer <key>
|
|
132
|
-
const authHeader = c.req.header("Authorization") ?? "";
|
|
133
|
-
const apiKey = authHeader.startsWith("Bearer ")
|
|
134
|
-
? authHeader.slice(7).trim()
|
|
135
|
-
: "";
|
|
136
|
-
// Identity for rate limiting: prefer API key, fall back to remote IP
|
|
137
|
-
const identity = apiKey || c.req.header("X-Forwarded-For") || "anonymous";
|
|
138
|
-
if (!checkRateLimit(identity)) {
|
|
139
|
-
return c.json({ error: "Rate limit exceeded. Slow down and retry." }, 429);
|
|
140
|
-
}
|
|
141
|
-
// Store the extracted key in typed context variables
|
|
142
|
-
c.set("apiKey", apiKey);
|
|
143
|
-
await next();
|
|
144
|
-
});
|
|
145
|
-
// ---------------------------------------------------------------------------
|
|
146
|
-
// POST /mcp — StreamableHTTP main channel
|
|
147
|
-
// ---------------------------------------------------------------------------
|
|
148
|
-
app.post("/mcp", async (c) => {
|
|
149
|
-
const apiKey = c.get("apiKey");
|
|
150
|
-
// Parse body once so we can pass it to handleRequest (avoids double-read)
|
|
151
|
-
let parsedBody;
|
|
152
|
-
try {
|
|
153
|
-
parsedBody = await c.req.json();
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
return c.json({ error: "Invalid JSON body" }, 400);
|
|
157
|
-
}
|
|
158
|
-
// Check for existing session or create a new one
|
|
159
|
-
const sessionId = c.req.header("Mcp-Session-Id");
|
|
160
|
-
let transport = sessionId ? sessions.get(sessionId) : undefined;
|
|
161
|
-
if (!transport) {
|
|
162
|
-
transport = new StreamableHTTPServerTransport({
|
|
163
|
-
sessionIdGenerator: () => randomUUID(),
|
|
164
|
-
});
|
|
165
|
-
const server = createMcpServer(apiKey);
|
|
166
|
-
// Capture transport reference for the closure before it changes
|
|
167
|
-
const t = transport;
|
|
168
|
-
t.onclose = () => {
|
|
169
|
-
if (t.sessionId) {
|
|
170
|
-
sessions.delete(t.sessionId);
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
await server.connect(transport);
|
|
174
|
-
if (transport.sessionId) {
|
|
175
|
-
sessions.set(transport.sessionId, transport);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const { incoming: req, outgoing: res } = c.env;
|
|
179
|
-
await transport.handleRequest(req, res, parsedBody);
|
|
180
|
-
// Response written by transport; return empty sentinel to Hono
|
|
181
|
-
return new Response(null, { status: 0 });
|
|
182
|
-
});
|
|
183
|
-
// ---------------------------------------------------------------------------
|
|
184
|
-
// GET /mcp — SSE fallback (server-initiated events)
|
|
185
|
-
// ---------------------------------------------------------------------------
|
|
186
|
-
app.get("/mcp", async (c) => {
|
|
187
|
-
const apiKey = c.get("apiKey");
|
|
188
|
-
const sessionId = c.req.header("Mcp-Session-Id");
|
|
189
|
-
let transport = sessionId ? sessions.get(sessionId) : undefined;
|
|
190
|
-
if (!transport) {
|
|
191
|
-
transport = new StreamableHTTPServerTransport({
|
|
192
|
-
sessionIdGenerator: () => randomUUID(),
|
|
193
|
-
});
|
|
194
|
-
const server = createMcpServer(apiKey);
|
|
195
|
-
const t = transport;
|
|
196
|
-
t.onclose = () => {
|
|
197
|
-
if (t.sessionId) {
|
|
198
|
-
sessions.delete(t.sessionId);
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
await server.connect(transport);
|
|
202
|
-
if (transport.sessionId) {
|
|
203
|
-
sessions.set(transport.sessionId, transport);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
const { incoming: req, outgoing: res } = c.env;
|
|
207
|
-
await transport.handleRequest(req, res);
|
|
208
|
-
return new Response(null, { status: 0 });
|
|
209
|
-
});
|
|
210
|
-
// ---------------------------------------------------------------------------
|
|
211
|
-
// DELETE /mcp — session cleanup
|
|
212
|
-
// ---------------------------------------------------------------------------
|
|
213
|
-
app.delete("/mcp", async (c) => {
|
|
214
|
-
const sessionId = c.req.header("Mcp-Session-Id");
|
|
215
|
-
if (!sessionId) {
|
|
216
|
-
return c.json({ error: "Mcp-Session-Id header required" }, 400);
|
|
217
|
-
}
|
|
218
|
-
const transport = sessions.get(sessionId);
|
|
219
|
-
if (!transport) {
|
|
220
|
-
return c.json({ error: "Session not found" }, 404);
|
|
221
|
-
}
|
|
222
|
-
const { incoming: req, outgoing: res } = c.env;
|
|
223
|
-
await transport.handleRequest(req, res);
|
|
224
|
-
return new Response(null, { status: 0 });
|
|
225
|
-
});
|
|
226
|
-
// ---------------------------------------------------------------------------
|
|
227
|
-
// Start server
|
|
228
|
-
// ---------------------------------------------------------------------------
|
|
229
|
-
export function startHttpServer(port = HTTP_PORT) {
|
|
230
|
-
serve({
|
|
231
|
-
fetch: app.fetch,
|
|
232
|
-
port,
|
|
233
|
-
}, (info) => {
|
|
234
|
-
console.error(`ForgeOS MCP HTTP server listening on http://localhost:${info.port}`);
|
|
235
|
-
console.error(` POST http://localhost:${info.port}/mcp`);
|
|
236
|
-
console.error(` GET http://localhost:${info.port}/mcp (SSE)`);
|
|
237
|
-
console.error(` DELETE http://localhost:${info.port}/mcp (cleanup)`);
|
|
238
|
-
console.error(` GET http://localhost:${info.port}/health`);
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
// Allow direct execution: node dist/http-server.js
|
|
242
|
-
if (process.argv[1]?.endsWith("http-server.js") ||
|
|
243
|
-
process.argv[1]?.endsWith("http-server.ts")) {
|
|
244
|
-
startHttpServer();
|
|
245
|
-
}
|
|
246
|
-
//# sourceMappingURL=http-server.js.map
|
package/dist/http-server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
-
import { TOOLS } from "./tools.js";
|
|
6
|
-
import { handleTool } from "./handlers.js";
|
|
7
|
-
function fail(error) {
|
|
8
|
-
return {
|
|
9
|
-
content: [
|
|
10
|
-
{
|
|
11
|
-
type: "text",
|
|
12
|
-
text: JSON.stringify({ ok: false, error }, null, 2),
|
|
13
|
-
},
|
|
14
|
-
],
|
|
15
|
-
isError: true,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
const server = new Server({ name: "forgeos", version: "1.2.0" }, { capabilities: { tools: {} } });
|
|
19
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
20
|
-
tools: TOOLS,
|
|
21
|
-
}));
|
|
22
|
-
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
23
|
-
const name = req.params.name;
|
|
24
|
-
const args = (req.params.arguments ?? {});
|
|
25
|
-
try {
|
|
26
|
-
return await handleTool(name, args);
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
return fail(e?.message ?? String(e));
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
async function main() {
|
|
33
|
-
const transport = new StdioServerTransport();
|
|
34
|
-
await server.connect(transport);
|
|
35
|
-
}
|
|
36
|
-
main().catch((err) => {
|
|
37
|
-
console.error(err);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
});
|
|
40
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;aACpD;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EACrC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,KAAK;CACb,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;IACrE,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|