@ampeco/public-api-mcp 0.2.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/LICENSE +21 -0
- package/README.md +734 -0
- package/dist/build/flattener.d.ts +39 -0
- package/dist/build/flattener.d.ts.map +1 -0
- package/dist/build/flattener.js +193 -0
- package/dist/build/flattener.js.map +1 -0
- package/dist/build/index.d.ts +13 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +175 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/optimizer.d.ts +32 -0
- package/dist/build/optimizer.d.ts.map +1 -0
- package/dist/build/optimizer.js +222 -0
- package/dist/build/optimizer.js.map +1 -0
- package/dist/build/parser.d.ts +35 -0
- package/dist/build/parser.d.ts.map +1 -0
- package/dist/build/parser.js +83 -0
- package/dist/build/parser.js.map +1 -0
- package/dist/build/types.d.ts +91 -0
- package/dist/build/types.d.ts.map +1 -0
- package/dist/build/types.js +5 -0
- package/dist/build/types.js.map +1 -0
- package/dist/build/zod-generator.d.ts +34 -0
- package/dist/build/zod-generator.d.ts.map +1 -0
- package/dist/build/zod-generator.js +317 -0
- package/dist/build/zod-generator.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +99 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/generated/build-stats.json +7 -0
- package/dist/generated/endpoints.json +32181 -0
- package/dist/generated/schemas.d.ts +8157 -0
- package/dist/generated/schemas.d.ts.map +1 -0
- package/dist/generated/schemas.js +2726 -0
- package/dist/generated/schemas.js.map +1 -0
- package/dist/generated/schemas.ts +3171 -0
- package/dist/server/factory.d.ts +11 -0
- package/dist/server/factory.d.ts.map +1 -0
- package/dist/server/factory.js +450 -0
- package/dist/server/factory.js.map +1 -0
- package/dist/server/factory.test.d.ts +5 -0
- package/dist/server/factory.test.d.ts.map +1 -0
- package/dist/server/factory.test.js +77 -0
- package/dist/server/factory.test.js.map +1 -0
- package/dist/server/http.d.ts +10 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +110 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1502 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/loader.d.ts +10 -0
- package/dist/server/loader.d.ts.map +1 -0
- package/dist/server/loader.js +19 -0
- package/dist/server/loader.js.map +1 -0
- package/dist/server/prompts.d.ts +6 -0
- package/dist/server/prompts.d.ts.map +1 -0
- package/dist/server/prompts.js +462 -0
- package/dist/server/prompts.js.map +1 -0
- package/dist/server/stdio.d.ts +10 -0
- package/dist/server/stdio.d.ts.map +1 -0
- package/dist/server/stdio.js +25 -0
- package/dist/server/stdio.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP MCP Server
|
|
3
|
+
* Runs MCP server with HTTP Streamable transport for remote access
|
|
4
|
+
*/
|
|
5
|
+
import express from 'express';
|
|
6
|
+
import cors from 'cors';
|
|
7
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
8
|
+
import { createServer } from './factory.js';
|
|
9
|
+
import { loadEndpoints } from './loader.js';
|
|
10
|
+
/**
|
|
11
|
+
* Start MCP server in HTTP mode
|
|
12
|
+
* Creates Express server listening on specified port
|
|
13
|
+
*/
|
|
14
|
+
export async function startHttpServer(port) {
|
|
15
|
+
console.log('[HTTP Mode] Starting MCP server...');
|
|
16
|
+
const endpoints = loadEndpoints();
|
|
17
|
+
console.log(`[HTTP Mode] Loaded ${endpoints.endpoints.length} endpoints from ${endpoints.info.title} v${endpoints.info.version}`);
|
|
18
|
+
console.log(`[HTTP Mode] Optimization: ${endpoints.stats.reductionPercent.toFixed(2)}% size reduction`);
|
|
19
|
+
// Create Express app
|
|
20
|
+
const app = express();
|
|
21
|
+
app.use(express.json());
|
|
22
|
+
// Configure CORS to allow access from any domain
|
|
23
|
+
app.use(cors({
|
|
24
|
+
origin: true, // Allow all origins (more permissive than '*' for credentials)
|
|
25
|
+
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'],
|
|
26
|
+
allowedHeaders: '*', // Allow all headers
|
|
27
|
+
exposedHeaders: ['*'], // Expose all headers
|
|
28
|
+
credentials: true, // Allow credentials
|
|
29
|
+
preflightContinue: false,
|
|
30
|
+
optionsSuccessStatus: 204,
|
|
31
|
+
}));
|
|
32
|
+
// Health check endpoint
|
|
33
|
+
app.get('/health', (_req, res) => {
|
|
34
|
+
res.json({
|
|
35
|
+
status: 'healthy',
|
|
36
|
+
server: 'public-api-mcp',
|
|
37
|
+
version: '0.1.0',
|
|
38
|
+
endpoints: endpoints.endpoints.length,
|
|
39
|
+
api: {
|
|
40
|
+
title: endpoints.info.title,
|
|
41
|
+
version: endpoints.info.version,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
// MCP endpoint - hostname is extracted from the path
|
|
46
|
+
// Example: POST /api.example.com or POST /api.example.com/http or POST /api.example.com/https
|
|
47
|
+
app.post('/*', async (req, res) => {
|
|
48
|
+
// Extract Bearer token from Authorization header
|
|
49
|
+
const authHeader = req.headers.authorization;
|
|
50
|
+
const bearerToken = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : '';
|
|
51
|
+
// Extract hostname and optional protocol from path
|
|
52
|
+
const fullPath = req.params[0]; // Wildcard capture
|
|
53
|
+
// Check if path ends with /http or /https
|
|
54
|
+
let protocol = 'https'; // Default to https
|
|
55
|
+
let hostnameWithoutSuffix = fullPath;
|
|
56
|
+
if (fullPath.endsWith('/http')) {
|
|
57
|
+
protocol = 'http';
|
|
58
|
+
hostnameWithoutSuffix = fullPath.slice(0, -5); // Remove '/http'
|
|
59
|
+
}
|
|
60
|
+
else if (fullPath.endsWith('/https')) {
|
|
61
|
+
protocol = 'https';
|
|
62
|
+
hostnameWithoutSuffix = fullPath.slice(0, -6); // Remove '/https'
|
|
63
|
+
}
|
|
64
|
+
const hostname = `${protocol}://${hostnameWithoutSuffix}`;
|
|
65
|
+
console.log(`[MCP Request] Target API: ${hostname}, Method: ${req.body?.method || 'unknown'}`);
|
|
66
|
+
// Create server instance with the bearer token and hostname
|
|
67
|
+
const server = createServer(endpoints, bearerToken, hostname);
|
|
68
|
+
try {
|
|
69
|
+
// Create stateless transport (no session management)
|
|
70
|
+
const transport = new StreamableHTTPServerTransport({
|
|
71
|
+
sessionIdGenerator: undefined,
|
|
72
|
+
});
|
|
73
|
+
// Connect server to transport
|
|
74
|
+
await server.connect(transport);
|
|
75
|
+
// Handle the request
|
|
76
|
+
await transport.handleRequest(req, res, req.body);
|
|
77
|
+
// Clean up when request closes
|
|
78
|
+
res.on('close', () => {
|
|
79
|
+
transport.close();
|
|
80
|
+
server.close();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error('Error handling MCP request:', error);
|
|
85
|
+
if (!res.headersSent) {
|
|
86
|
+
res.status(500).json({
|
|
87
|
+
jsonrpc: '2.0',
|
|
88
|
+
error: {
|
|
89
|
+
code: -32603,
|
|
90
|
+
message: 'Internal server error',
|
|
91
|
+
data: error instanceof Error ? error.message : String(error),
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// Start server
|
|
98
|
+
app.listen(port, () => {
|
|
99
|
+
console.log(`\n🚀 MCP Server started successfully!`);
|
|
100
|
+
console.log(` Port: ${port}`);
|
|
101
|
+
console.log(` Health: http://localhost:${port}/health`);
|
|
102
|
+
console.log(` MCP Endpoint Pattern: http://localhost:${port}/{hostname}[/{protocol}]`);
|
|
103
|
+
console.log(` Examples:`);
|
|
104
|
+
console.log(` - http://localhost:${port}/api.example.com (defaults to https)`);
|
|
105
|
+
console.log(` - http://localhost:${port}/api.example.com/https (explicit https)`);
|
|
106
|
+
console.log(` - http://localhost:${port}/api.example.com/http (explicit http)`);
|
|
107
|
+
console.log(`\nReady to accept MCP requests.\n`);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|