qyl-mcp-server 0.1.0 → 1.0.0-beta.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/dist/main.js +50 -6
- package/dist/main.js.map +1 -1
- package/dist/mcp-app.html +1 -1
- package/dist/mcp-dashboard.html +1 -1
- package/dist/oauth.d.ts +22 -0
- package/dist/oauth.js +215 -0
- package/dist/oauth.js.map +1 -0
- package/package.json +3 -3
package/dist/main.js
CHANGED
|
@@ -9,12 +9,16 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
11
11
|
import { ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
12
|
+
import { realpathSync } from "node:fs";
|
|
12
13
|
import { resolve } from "node:path";
|
|
13
14
|
import { pathToFileURL } from "node:url";
|
|
14
15
|
import { createServer } from "./server.js";
|
|
15
16
|
import { createMcpApp, createMcpTransport, isLoopbackBindHost, loopbackOrigins, readMcpAuthToken, requireMcpAuthentication, } from "./http-security.js";
|
|
16
17
|
import { mcpErrorResponse, mcpRequestId } from "./mcp-errors.js";
|
|
17
18
|
import { closeDefaultNativeExecutionRuntime } from "./native-execution.js";
|
|
19
|
+
import { mcpAuthRouter } from "@modelcontextprotocol/sdk/server/auth/router.js";
|
|
20
|
+
import { requireBearerAuth } from "@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js";
|
|
21
|
+
import { AnonymousOAuthProvider } from "./oauth.js";
|
|
18
22
|
export function sanitizedErrorType(error) {
|
|
19
23
|
if (!(error instanceof Error))
|
|
20
24
|
return "UnknownError";
|
|
@@ -132,7 +136,7 @@ export async function startStreamableHTTPServer(createServer) {
|
|
|
132
136
|
app.get("/healthz", (_request, response) => {
|
|
133
137
|
response.status(200).json({ status: "ok" });
|
|
134
138
|
});
|
|
135
|
-
|
|
139
|
+
const handleMcpRequest = async (req, res) => {
|
|
136
140
|
const server = createServer();
|
|
137
141
|
const transport = createMcpTransport(config.allowedOrigins);
|
|
138
142
|
res.once("close", () => {
|
|
@@ -150,16 +154,42 @@ export async function startStreamableHTTPServer(createServer) {
|
|
|
150
154
|
.json(mcpErrorResponse(ErrorCode.InternalError, "Internal server error", mcpRequestId(req.body)));
|
|
151
155
|
}
|
|
152
156
|
}
|
|
153
|
-
}
|
|
157
|
+
};
|
|
158
|
+
// The host is the namespace (mcp.<domain>), so the root is the canonical MCP endpoint.
|
|
159
|
+
// "/mcp" stays as a compatibility alias: published READMEs and configured connectors use it.
|
|
160
|
+
//
|
|
161
|
+
// Hosted deployments speak OAuth 2.1 (SDK-owned wire protocol, anonymous auto-approve
|
|
162
|
+
// policy) so stock MCP clients connect via discovery without an account; the operator's
|
|
163
|
+
// static bearer token keeps working. Loopback keeps the legacy static-token/no-auth modes.
|
|
164
|
+
if (config.publicUrl !== undefined && config.authToken !== undefined) {
|
|
165
|
+
const oauthProvider = new AnonymousOAuthProvider(config.authToken, config.authToken);
|
|
166
|
+
app.use(mcpAuthRouter({
|
|
167
|
+
provider: oauthProvider,
|
|
168
|
+
issuerUrl: config.publicUrl,
|
|
169
|
+
resourceName: "qyl telemetry MCP server",
|
|
170
|
+
scopesSupported: ["qyl"],
|
|
171
|
+
}));
|
|
172
|
+
const requireOAuthBearer = requireBearerAuth({
|
|
173
|
+
verifier: oauthProvider,
|
|
174
|
+
resourceMetadataUrl: new URL("/.well-known/oauth-protected-resource", config.publicUrl)
|
|
175
|
+
.href,
|
|
176
|
+
});
|
|
177
|
+
app.all("/", requireOAuthBearer, handleMcpRequest);
|
|
178
|
+
app.all("/mcp", requireOAuthBearer, handleMcpRequest);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
app.all("/", requireMcpAuthentication(config.authToken), handleMcpRequest);
|
|
182
|
+
app.all("/mcp", requireMcpAuthentication(config.authToken), handleMcpRequest);
|
|
183
|
+
}
|
|
154
184
|
const httpServer = app.listen(config.port, config.bindHost);
|
|
155
185
|
await new Promise((resolve, reject) => {
|
|
156
186
|
httpServer.once("listening", resolve);
|
|
157
187
|
httpServer.once("error", reject);
|
|
158
188
|
});
|
|
159
189
|
const endpoint = config.publicUrl
|
|
160
|
-
? new URL("/
|
|
161
|
-
: `http://${urlHost(config.bindHost)}:${config.port}
|
|
162
|
-
console.log(`MCP server listening on ${endpoint}`);
|
|
190
|
+
? new URL("/", config.publicUrl).href
|
|
191
|
+
: `http://${urlHost(config.bindHost)}:${config.port}/`;
|
|
192
|
+
console.log(`MCP server listening on ${endpoint} (alias: /mcp)`);
|
|
163
193
|
let shuttingDown = false;
|
|
164
194
|
const shutdown = () => {
|
|
165
195
|
if (shuttingDown)
|
|
@@ -205,8 +235,22 @@ async function main() {
|
|
|
205
235
|
await startStreamableHTTPServer(() => createServer({ transport: "streamable_http" }));
|
|
206
236
|
}
|
|
207
237
|
}
|
|
238
|
+
function toRealEntryHref(entryPoint) {
|
|
239
|
+
const resolved = resolve(entryPoint);
|
|
240
|
+
try {
|
|
241
|
+
return pathToFileURL(realpathSync(resolved)).href;
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// A vanished or unreadable entry path cannot be this module; fall back to the lexical path.
|
|
245
|
+
return pathToFileURL(resolved).href;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// npm bin shims invoke this file through a node_modules/.bin symlink, so the entry point must be
|
|
249
|
+
// realpath'd before comparing against import.meta.url (which the loader already resolved) — plain
|
|
250
|
+
// resolve() keeps the symlink path, the comparison fails, and main() silently never runs.
|
|
208
251
|
const entryPoint = process.argv[1];
|
|
209
|
-
|
|
252
|
+
const entryHref = entryPoint === undefined ? undefined : toRealEntryHref(entryPoint);
|
|
253
|
+
if (entryHref === import.meta.url) {
|
|
210
254
|
void main().catch((error) => {
|
|
211
255
|
console.error(`Standalone MCP startup failed (${sanitizedErrorType(error)}); secret details omitted`);
|
|
212
256
|
process.exitCode = 1;
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|