mcpico 0.1.1 → 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/README.md +123 -2
- package/dist/auth-types.d.ts +54 -0
- package/dist/auth-types.js +9 -0
- package/dist/auth-types.js.map +1 -0
- package/dist/auth.d.ts +38 -0
- package/dist/auth.js +122 -0
- package/dist/auth.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.js.map +1 -1
- package/dist/discoverer.d.ts +2 -1
- package/dist/discoverer.js +15 -3
- package/dist/discoverer.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/oauth-provider.d.ts +19 -0
- package/dist/oauth-provider.js +79 -0
- package/dist/oauth-provider.js.map +1 -0
- package/dist/server.d.ts +31 -0
- package/dist/server.js +132 -57
- package/dist/server.js.map +1 -1
- package/dist/token-store.d.ts +11 -0
- package/dist/token-store.js +94 -0
- package/dist/token-store.js.map +1 -0
- package/package.json +2 -1
- package/src/auth-types.ts +71 -0
- package/src/auth.test.ts +218 -0
- package/src/auth.ts +159 -0
- package/src/config.ts +14 -0
- package/src/discoverer.ts +25 -5
- package/src/help.test.ts +40 -0
- package/src/index.ts +1 -1
- package/src/oauth-provider.ts +110 -0
- package/src/server.test.ts +324 -0
- package/src/server.ts +165 -75
- package/src/token-store.test.ts +154 -0
- package/src/token-store.ts +109 -0
- package/vitest.config.ts +7 -4
package/dist/server.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
4
|
+
import { createServer } from "node:http";
|
|
3
5
|
import { z } from "zod/v4";
|
|
4
6
|
import { validateServerConfig } from "./config.js";
|
|
5
7
|
import { discoverServer, disconnectServer, } from "./discoverer.js";
|
|
@@ -7,12 +9,96 @@ import { groupTools } from "./grouper.js";
|
|
|
7
9
|
import { parseCommand } from "./parser.js";
|
|
8
10
|
import { generateHelpText } from "./help.js";
|
|
9
11
|
import { forwardToolCall } from "./proxy.js";
|
|
12
|
+
import { resolveUpstreamAuth, resolveListenAuth, extractBearerToken, validateBearerToken, sendUnauthorized } from "./auth.js";
|
|
10
13
|
/** Helper: create a simple text content result */
|
|
11
|
-
function textResult(text) {
|
|
14
|
+
export function textResult(text) {
|
|
12
15
|
return {
|
|
13
16
|
content: [{ type: "text", text }],
|
|
14
17
|
};
|
|
15
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Merge tool groups from multiple upstream servers.
|
|
21
|
+
*
|
|
22
|
+
* Groups with the same name are merged:
|
|
23
|
+
* - Tools are concatenated
|
|
24
|
+
* - serverName is joined with " + "
|
|
25
|
+
*/
|
|
26
|
+
export function mergeGroups(allGroups) {
|
|
27
|
+
const mergedGroups = new Map();
|
|
28
|
+
for (const group of allGroups) {
|
|
29
|
+
const existing = mergedGroups.get(group.groupName);
|
|
30
|
+
if (existing) {
|
|
31
|
+
existing.tools.push(...group.tools);
|
|
32
|
+
if (!existing.serverName.includes(group.serverName)) {
|
|
33
|
+
existing.serverName += ` + ${group.serverName}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
mergedGroups.set(group.groupName, { ...group });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return mergedGroups;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Handle a tool call command for a given group.
|
|
44
|
+
*
|
|
45
|
+
* Dispatches: help → error → unknown subcommand → forward to upstream server.
|
|
46
|
+
*
|
|
47
|
+
* Exported for testing; allows injecting a mock forwardFn to avoid
|
|
48
|
+
* connecting to real upstream servers.
|
|
49
|
+
*/
|
|
50
|
+
export async function handleToolCall(command, group, servers, helpText, forwardFn = forwardToolCall) {
|
|
51
|
+
const parsed = parseCommand(command);
|
|
52
|
+
if (parsed.isHelp) {
|
|
53
|
+
return textResult(helpText);
|
|
54
|
+
}
|
|
55
|
+
if (parsed.error) {
|
|
56
|
+
return textResult(parsed.error);
|
|
57
|
+
}
|
|
58
|
+
const toolName = parsed.subcommand;
|
|
59
|
+
const upstreamTool = group.tools.find((t) => t.name === toolName);
|
|
60
|
+
if (!upstreamTool) {
|
|
61
|
+
const available = group.tools.map((t) => t.name).join(", ");
|
|
62
|
+
return textResult(`Unknown subcommand: "${toolName}"\n\nAvailable in ${group.groupName}: ${available}\n\nUse 'help' for full documentation.`);
|
|
63
|
+
}
|
|
64
|
+
const serverForTool = servers.find((s) => s.tools.some((t) => t.name === toolName));
|
|
65
|
+
if (!serverForTool) {
|
|
66
|
+
return textResult(`Internal error: could not find upstream server for tool "${toolName}"`);
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const result = await forwardFn(serverForTool, toolName, parsed.args);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return textResult(`Error calling "${toolName}": ${err.message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Build the description string for a tool group.
|
|
78
|
+
*/
|
|
79
|
+
export function buildGroupDescription(group) {
|
|
80
|
+
const toolCount = group.tools.length;
|
|
81
|
+
return [
|
|
82
|
+
`MCPico ${group.groupName} — ${toolCount} tool${toolCount === 1 ? "" : "s"}`,
|
|
83
|
+
`Source: ${group.serverName}`,
|
|
84
|
+
`Use 'help' to see all subcommands and their parameters.`,
|
|
85
|
+
`Format: <subcommand> {"key":"value",...}`,
|
|
86
|
+
].join(" | ");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Validate all server configs, returning an array of error messages.
|
|
90
|
+
* Returns empty array if all configs are valid.
|
|
91
|
+
*/
|
|
92
|
+
export function validateAllServerConfigs(servers) {
|
|
93
|
+
const errors = [];
|
|
94
|
+
for (const serverConfig of servers) {
|
|
95
|
+
const err = validateServerConfig(serverConfig);
|
|
96
|
+
if (err) {
|
|
97
|
+
errors.push(err);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return errors;
|
|
101
|
+
}
|
|
16
102
|
/**
|
|
17
103
|
* Start the MCPico proxy server.
|
|
18
104
|
*
|
|
@@ -27,13 +113,7 @@ export async function startServer(config) {
|
|
|
27
113
|
const servers = [];
|
|
28
114
|
const allGroups = [];
|
|
29
115
|
// Validate server configs
|
|
30
|
-
const validationErrors =
|
|
31
|
-
for (const serverConfig of config.servers) {
|
|
32
|
-
const err = validateServerConfig(serverConfig);
|
|
33
|
-
if (err) {
|
|
34
|
-
validationErrors.push(err);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
116
|
+
const validationErrors = validateAllServerConfigs(config.servers);
|
|
37
117
|
if (validationErrors.length > 0) {
|
|
38
118
|
console.error("Configuration errors:");
|
|
39
119
|
for (const err of validationErrors) {
|
|
@@ -49,7 +129,10 @@ export async function startServer(config) {
|
|
|
49
129
|
? serverConfig.transport.url
|
|
50
130
|
: serverConfig.transport.command;
|
|
51
131
|
console.error(` Connecting to "${serverConfig.name}" (${serverConfig.transport.type}: ${transportLabel})...`);
|
|
52
|
-
const
|
|
132
|
+
const resolvedAuth = serverConfig.auth
|
|
133
|
+
? resolveUpstreamAuth(serverConfig.auth)
|
|
134
|
+
: undefined;
|
|
135
|
+
const discovered = await discoverServer(serverConfig.name, serverConfig.transport, serverConfig.connectTimeoutMs, resolvedAuth);
|
|
53
136
|
servers.push(discovered);
|
|
54
137
|
const groups = groupTools(serverConfig.name, discovered.tools, separator, config.groups);
|
|
55
138
|
console.error(` → ${discovered.tools.length} tools → ${groups.length} groups: ${groups.map((g) => g.groupName).join(", ")}`);
|
|
@@ -64,21 +147,9 @@ export async function startServer(config) {
|
|
|
64
147
|
process.exit(1);
|
|
65
148
|
}
|
|
66
149
|
// Build lookup: groupName → ToolGroup (merged across servers)
|
|
67
|
-
const mergedGroups =
|
|
68
|
-
for (const group of allGroups) {
|
|
69
|
-
const existing = mergedGroups.get(group.groupName);
|
|
70
|
-
if (existing) {
|
|
71
|
-
existing.tools.push(...group.tools);
|
|
72
|
-
if (!existing.serverName.includes(group.serverName)) {
|
|
73
|
-
existing.serverName += ` + ${group.serverName}`;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
mergedGroups.set(group.groupName, { ...group });
|
|
78
|
-
}
|
|
79
|
-
}
|
|
150
|
+
const mergedGroups = mergeGroups(allGroups);
|
|
80
151
|
// Create the MCPico server
|
|
81
|
-
const server = new McpServer({ name: "MCPico", version: "0.
|
|
152
|
+
const server = new McpServer({ name: "MCPico", version: "0.2.0" }, {
|
|
82
153
|
capabilities: { tools: {}, resources: {}, prompts: {} },
|
|
83
154
|
instructions: "MCPico bundles upstream MCP tools into hierarchical groups. " +
|
|
84
155
|
"Use 'help' on any group to discover available subcommands. " +
|
|
@@ -87,12 +158,7 @@ export async function startServer(config) {
|
|
|
87
158
|
// Register each group as a tool
|
|
88
159
|
for (const [groupName, group] of mergedGroups) {
|
|
89
160
|
const toolCount = group.tools.length;
|
|
90
|
-
const description =
|
|
91
|
-
`MCPico ${groupName} — ${toolCount} tool${toolCount === 1 ? "" : "s"}`,
|
|
92
|
-
`Source: ${group.serverName}`,
|
|
93
|
-
`Use 'help' to see all subcommands and their parameters.`,
|
|
94
|
-
`Format: <subcommand> {"key":"value",...}`,
|
|
95
|
-
].join(" | ");
|
|
161
|
+
const description = buildGroupDescription(group);
|
|
96
162
|
const helpText = generateHelpText(group);
|
|
97
163
|
server.registerTool(groupName, {
|
|
98
164
|
title: `MCPico: ${groupName}`,
|
|
@@ -104,30 +170,7 @@ export async function startServer(config) {
|
|
|
104
170
|
`${toolCount} subcommand${toolCount === 1 ? "" : "s"} available.`),
|
|
105
171
|
},
|
|
106
172
|
}, async (args) => {
|
|
107
|
-
|
|
108
|
-
if (parsed.isHelp) {
|
|
109
|
-
return textResult(helpText);
|
|
110
|
-
}
|
|
111
|
-
if (parsed.error) {
|
|
112
|
-
return textResult(parsed.error);
|
|
113
|
-
}
|
|
114
|
-
const toolName = parsed.subcommand;
|
|
115
|
-
const upstreamTool = group.tools.find((t) => t.name === toolName);
|
|
116
|
-
if (!upstreamTool) {
|
|
117
|
-
const available = group.tools.map((t) => t.name).join(", ");
|
|
118
|
-
return textResult(`Unknown subcommand: "${toolName}"\n\nAvailable in ${groupName}: ${available}\n\nUse 'help' for full documentation.`);
|
|
119
|
-
}
|
|
120
|
-
const serverForTool = servers.find((s) => s.tools.some((t) => t.name === toolName));
|
|
121
|
-
if (!serverForTool) {
|
|
122
|
-
return textResult(`Internal error: could not find upstream server for tool "${toolName}"`);
|
|
123
|
-
}
|
|
124
|
-
try {
|
|
125
|
-
const result = await forwardToolCall(serverForTool, toolName, parsed.args);
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
return textResult(`Error calling "${toolName}": ${err.message}`);
|
|
130
|
-
}
|
|
173
|
+
return handleToolCall(args.command, group, servers, helpText);
|
|
131
174
|
});
|
|
132
175
|
console.error(` Registered group: ${groupName} (${toolCount} tools)`);
|
|
133
176
|
}
|
|
@@ -189,10 +232,42 @@ export async function startServer(config) {
|
|
|
189
232
|
if (promptCount > 0) {
|
|
190
233
|
console.error(` Registered ${promptCount} prompt(s)`);
|
|
191
234
|
}
|
|
192
|
-
// Connect to client via
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
235
|
+
// Connect to client via configured transport
|
|
236
|
+
const listenConfig = config.listen || { type: "stdio" };
|
|
237
|
+
if (listenConfig.type === "sse") {
|
|
238
|
+
// Resolve listen auth
|
|
239
|
+
let listenAuth;
|
|
240
|
+
if (listenConfig.auth) {
|
|
241
|
+
listenAuth = resolveListenAuth(listenConfig.auth);
|
|
242
|
+
}
|
|
243
|
+
const transport = new StreamableHTTPServerTransport();
|
|
244
|
+
const httpServer = createServer(async (req, res) => {
|
|
245
|
+
// Auth check
|
|
246
|
+
if (listenAuth) {
|
|
247
|
+
const providedToken = extractBearerToken(req);
|
|
248
|
+
if (!validateBearerToken(providedToken, listenAuth.token)) {
|
|
249
|
+
sendUnauthorized(res);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// Collect body for handleRequest
|
|
254
|
+
const chunks = [];
|
|
255
|
+
for await (const chunk of req) {
|
|
256
|
+
chunks.push(chunk);
|
|
257
|
+
}
|
|
258
|
+
const body = chunks.length > 0 ? Buffer.concat(chunks).toString() : undefined;
|
|
259
|
+
await transport.handleRequest(req, res, body);
|
|
260
|
+
});
|
|
261
|
+
await server.connect(transport);
|
|
262
|
+
const host = listenConfig.host || "localhost";
|
|
263
|
+
httpServer.listen(listenConfig.port, host);
|
|
264
|
+
console.error(`MCPico ready — ${mergedGroups.size} group(s), ${servers.length} upstream server(s) — listening on http://${host}:${listenConfig.port}`);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const transport = new StdioServerTransport();
|
|
268
|
+
await server.connect(transport);
|
|
269
|
+
console.error(`MCPico ready — ${mergedGroups.size} group(s), ${servers.length} upstream server(s)`);
|
|
270
|
+
}
|
|
196
271
|
// Handle shutdown
|
|
197
272
|
let shuttingDown = false;
|
|
198
273
|
const shutdown = async () => {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OAuthTokens } from "@modelcontextprotocol/sdk/shared/auth.js";
|
|
2
|
+
/** Derive a storage key from server URL */
|
|
3
|
+
export declare function storageKey(serverUrl: string): string;
|
|
4
|
+
/** Persist OAuth tokens for a server */
|
|
5
|
+
export declare function saveTokens(serverUrl: string, tokens: OAuthTokens): void;
|
|
6
|
+
/** Load persisted OAuth tokens for a server */
|
|
7
|
+
export declare function loadTokens(serverUrl: string): OAuthTokens | undefined;
|
|
8
|
+
/** Clear stored tokens (e.g., when invalidated) */
|
|
9
|
+
export declare function clearTokens(serverUrl: string): void;
|
|
10
|
+
/** Check if a stored token is still valid (not expired, with 60s buffer) */
|
|
11
|
+
export declare function isTokenValid(serverUrl: string): boolean;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token store: persist OAuth tokens to ~/.mcplico/credentials.json
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
const CREDENTIALS_DIR = join(homedir(), ".mcplico");
|
|
8
|
+
const CREDENTIALS_FILE = join(CREDENTIALS_DIR, "credentials.json");
|
|
9
|
+
function ensureDir() {
|
|
10
|
+
if (!existsSync(CREDENTIALS_DIR)) {
|
|
11
|
+
mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function readStore() {
|
|
15
|
+
try {
|
|
16
|
+
if (!existsSync(CREDENTIALS_FILE))
|
|
17
|
+
return {};
|
|
18
|
+
const raw = readFileSync(CREDENTIALS_FILE, "utf-8");
|
|
19
|
+
return JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function writeStore(store) {
|
|
26
|
+
ensureDir();
|
|
27
|
+
writeFileSync(CREDENTIALS_FILE, JSON.stringify(store, null, 2), {
|
|
28
|
+
mode: 0o600,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** Derive a storage key from server URL */
|
|
32
|
+
export function storageKey(serverUrl) {
|
|
33
|
+
try {
|
|
34
|
+
const url = new URL(serverUrl);
|
|
35
|
+
// Use hostname + pathname to distinguish different servers
|
|
36
|
+
return `${url.hostname}${url.pathname === "/" ? "" : url.pathname}`;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Fallback for non-URL values
|
|
40
|
+
return serverUrl.replace(/[^a-zA-Z0-9]/g, "_");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Persist OAuth tokens for a server */
|
|
44
|
+
export function saveTokens(serverUrl, tokens) {
|
|
45
|
+
const store = readStore();
|
|
46
|
+
const key = storageKey(serverUrl);
|
|
47
|
+
store[key] = {
|
|
48
|
+
access_token: tokens.access_token,
|
|
49
|
+
refresh_token: tokens.refresh_token,
|
|
50
|
+
token_type: tokens.token_type,
|
|
51
|
+
expires_at: tokens.expires_in
|
|
52
|
+
? Date.now() + tokens.expires_in * 1000
|
|
53
|
+
: undefined,
|
|
54
|
+
scope: tokens.scope,
|
|
55
|
+
};
|
|
56
|
+
writeStore(store);
|
|
57
|
+
}
|
|
58
|
+
/** Load persisted OAuth tokens for a server */
|
|
59
|
+
export function loadTokens(serverUrl) {
|
|
60
|
+
const store = readStore();
|
|
61
|
+
const key = storageKey(serverUrl);
|
|
62
|
+
const stored = store[key];
|
|
63
|
+
if (!stored)
|
|
64
|
+
return undefined;
|
|
65
|
+
return {
|
|
66
|
+
access_token: stored.access_token,
|
|
67
|
+
refresh_token: stored.refresh_token,
|
|
68
|
+
token_type: stored.token_type || "Bearer",
|
|
69
|
+
expires_in: stored.expires_at
|
|
70
|
+
? Math.max(0, Math.floor((stored.expires_at - Date.now()) / 1000)) || undefined
|
|
71
|
+
: undefined,
|
|
72
|
+
scope: stored.scope,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** Clear stored tokens (e.g., when invalidated) */
|
|
76
|
+
export function clearTokens(serverUrl) {
|
|
77
|
+
const store = readStore();
|
|
78
|
+
const key = storageKey(serverUrl);
|
|
79
|
+
delete store[key];
|
|
80
|
+
writeStore(store);
|
|
81
|
+
}
|
|
82
|
+
/** Check if a stored token is still valid (not expired, with 60s buffer) */
|
|
83
|
+
export function isTokenValid(serverUrl) {
|
|
84
|
+
const store = readStore();
|
|
85
|
+
const key = storageKey(serverUrl);
|
|
86
|
+
const stored = store[key];
|
|
87
|
+
if (!stored || !stored.access_token)
|
|
88
|
+
return false;
|
|
89
|
+
if (!stored.expires_at)
|
|
90
|
+
return true; // No expiry info — assume valid
|
|
91
|
+
// Refresh with 60 second buffer
|
|
92
|
+
return Date.now() < stored.expires_at - 60_000;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../src/token-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcpico",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MCPico — MCP proxy that bundles flat tool lists into hierarchical subcommand groups. Pico footprint, maximum discovery.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.0.0",
|
|
40
|
+
"@vitest/coverage-v8": "^4.1.9",
|
|
40
41
|
"tsx": "^4.19.0",
|
|
41
42
|
"typescript": "^5.8.0",
|
|
42
43
|
"vitest": "^4.1.9"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication types for MCPico.
|
|
3
|
+
*
|
|
4
|
+
* Two layers:
|
|
5
|
+
* Layer 1 — Auth for the listen endpoint (protecting MCPico from clients)
|
|
6
|
+
* Layer 2 — Auth passthrough to upstream MCP servers
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// ── Upstream auth (passthrough to servers MCPico wraps) ──
|
|
10
|
+
|
|
11
|
+
export interface BearerAuth {
|
|
12
|
+
type: "bearer";
|
|
13
|
+
/** Bearer token value. Supports ${ENV_VAR} interpolation. */
|
|
14
|
+
token: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface HeaderAuth {
|
|
18
|
+
type: "header";
|
|
19
|
+
/** Header name (e.g. "X-API-Key", "X-Auth-Token") */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Header value. Supports ${ENV_VAR} interpolation. */
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface OAuthClientCredentials {
|
|
26
|
+
type: "oauth";
|
|
27
|
+
/** OAuth 2.0 grant type */
|
|
28
|
+
grant_type: "client_credentials";
|
|
29
|
+
/** Client ID for the OAuth provider */
|
|
30
|
+
client_id: string;
|
|
31
|
+
/** Client secret for the OAuth provider */
|
|
32
|
+
client_secret: string;
|
|
33
|
+
/** Token endpoint URL */
|
|
34
|
+
token_url: string;
|
|
35
|
+
/** Optional scopes to request */
|
|
36
|
+
scopes?: string[];
|
|
37
|
+
/** Optional authorization server metadata URL (if different from token_url issuer) */
|
|
38
|
+
authorization_server_url?: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type UpstreamAuth = BearerAuth | HeaderAuth | OAuthClientCredentials;
|
|
42
|
+
|
|
43
|
+
// ── Listen endpoint auth (protecting MCPico from clients) ──
|
|
44
|
+
|
|
45
|
+
export interface ListenBearerAuth {
|
|
46
|
+
type: "bearer";
|
|
47
|
+
/** Bearer token that clients must provide. Supports ${ENV_VAR} interpolation. */
|
|
48
|
+
token: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type ListenAuth = ListenBearerAuth;
|
|
52
|
+
|
|
53
|
+
// ── Resolved auth (after env var interpolation) ──
|
|
54
|
+
|
|
55
|
+
export interface ResolvedBearerAuth {
|
|
56
|
+
type: "bearer";
|
|
57
|
+
token: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface ResolvedHeaderAuth {
|
|
61
|
+
type: "header";
|
|
62
|
+
name: string;
|
|
63
|
+
value: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type ResolvedUpstreamAuth =
|
|
67
|
+
| ResolvedBearerAuth
|
|
68
|
+
| ResolvedHeaderAuth
|
|
69
|
+
| (OAuthClientCredentials & { type: "oauth" }); // OAuth is resolved at request time
|
|
70
|
+
|
|
71
|
+
export type ResolvedListenAuth = ResolvedBearerAuth;
|