@lovable.dev/mcp-js 0.26.2 → 0.26.3
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/cli/extract-manifest.cjs +2 -2
- package/dist/cli/extract-manifest.js +2 -2
- package/dist/{cors-DPRJFY-U.cjs → cors-CzTj3-nh.cjs} +3 -2
- package/dist/{cors-DnU41czH.js → cors-D1m2Ud44.js} +3 -2
- package/dist/{list-tools-DCs034XG.js → list-tools-CTtFfDLi.js} +1 -1
- package/dist/{list-tools-ka32VIXt.cjs → list-tools-wQ13O3WE.cjs} +1 -1
- package/dist/{mcp-C9fh9I8u.cjs → mcp-CG_9H8CN.cjs} +9 -6
- package/dist/{mcp-DlcYgsv9.js → mcp-DlbNiP7o.js} +9 -6
- package/dist/{package-Bbg8XwRW.js → package-Cr1oDeFn.js} +1 -1
- package/dist/{package-CBvVzH3w.cjs → package-oSicfX7m.cjs} +1 -1
- package/dist/protocols/mcp/index.cjs +1 -1
- package/dist/protocols/mcp/index.js +1 -1
- package/dist/protocols/oauth-metadata.cjs +1 -1
- package/dist/protocols/oauth-metadata.js +1 -1
- package/dist/protocols/rest/index.cjs +2 -2
- package/dist/protocols/rest/index.js +2 -2
- package/dist/{rest-BpFG5VRY.cjs → rest-B9OtLlIc.cjs} +2 -2
- package/dist/{rest-Di-HJGi6.js → rest-BTK8v5-l.js} +2 -2
- package/dist/stacks/supabase/index.cjs +4 -4
- package/dist/stacks/supabase/index.js +4 -4
- package/dist/stacks/supabase/vite.cjs +1 -1
- package/dist/stacks/supabase/vite.js +1 -1
- package/dist/stacks/tanstack/index.cjs +4 -4
- package/dist/stacks/tanstack/index.js +4 -4
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const require_package = require("../package-
|
|
3
|
-
const require_list_tools = require("../list-tools-
|
|
2
|
+
const require_package = require("../package-oSicfX7m.cjs");
|
|
3
|
+
const require_list_tools = require("../list-tools-wQ13O3WE.cjs");
|
|
4
4
|
const require_fs_errors = require("../fs-errors-CWNzOV75.cjs");
|
|
5
5
|
let node_fs = require("node:fs");
|
|
6
6
|
let node_path = require("node:path");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as version } from "../package-
|
|
3
|
-
import { t as buildMcpListing } from "../list-tools-
|
|
2
|
+
import { t as version } from "../package-Cr1oDeFn.js";
|
|
3
|
+
import { t as buildMcpListing } from "../list-tools-CTtFfDLi.js";
|
|
4
4
|
import { t as isFileMissing } from "../fs-errors-PA2t1TIp.js";
|
|
5
5
|
import { lstatSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
6
6
|
import { dirname, resolve } from "node:path";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_logger = require("./logger-BSKbuM66.cjs");
|
|
2
|
-
const require_package = require("./package-
|
|
2
|
+
const require_package = require("./package-oSicfX7m.cjs");
|
|
3
3
|
require("./metadata-path-zd7NSNoa.cjs");
|
|
4
4
|
let jose = require("jose");
|
|
5
5
|
//#region src/core/http.ts
|
|
@@ -17,7 +17,8 @@ function methodNotAllowed(allow) {
|
|
|
17
17
|
status: 405,
|
|
18
18
|
headers: {
|
|
19
19
|
...JSON_HEADERS,
|
|
20
|
-
Allow: allow
|
|
20
|
+
Allow: allow,
|
|
21
|
+
"Cache-Control": "no-store"
|
|
21
22
|
}
|
|
22
23
|
});
|
|
23
24
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as log, n as applyLogLevelFromEnv, o as parseSafeUrl, r as describeError, s as trimTrailingSlash, t as LOG_LEVEL_ENV_VAR, u as resolveMetricsConfig } from "./logger-3-kwsF-5.js";
|
|
2
|
-
import { t as version } from "./package-
|
|
2
|
+
import { t as version } from "./package-Cr1oDeFn.js";
|
|
3
3
|
import "./metadata-path-CAkNcfyY.js";
|
|
4
4
|
import { createLocalJWKSet, decodeProtectedHeader, jwtVerify } from "jose";
|
|
5
5
|
//#region src/core/http.ts
|
|
@@ -17,7 +17,8 @@ function methodNotAllowed(allow) {
|
|
|
17
17
|
status: 405,
|
|
18
18
|
headers: {
|
|
19
19
|
...JSON_HEADERS,
|
|
20
|
-
Allow: allow
|
|
20
|
+
Allow: allow,
|
|
21
|
+
"Cache-Control": "no-store"
|
|
21
22
|
}
|
|
22
23
|
});
|
|
23
24
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as createRequestAuthorizer, m as methodNotAllowed, n as withCors, p as headResponse, r as assertRestResourceBinding, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-
|
|
1
|
+
import { i as createRequestAuthorizer, m as methodNotAllowed, n as withCors, p as headResponse, r as assertRestResourceBinding, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-D1m2Ud44.js";
|
|
2
2
|
import { objectFromShape } from "@modelcontextprotocol/sdk/server/zod-compat.js";
|
|
3
3
|
import { toJsonSchemaCompat } from "@modelcontextprotocol/sdk/server/zod-json-schema-compat.js";
|
|
4
4
|
//#region src/protocols/rest/list-tools.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_cors = require("./cors-
|
|
1
|
+
const require_cors = require("./cors-CzTj3-nh.cjs");
|
|
2
2
|
let _modelcontextprotocol_sdk_server_zod_compat_js = require("@modelcontextprotocol/sdk/server/zod-compat.js");
|
|
3
3
|
let _modelcontextprotocol_sdk_server_zod_json_schema_compat_js = require("@modelcontextprotocol/sdk/server/zod-json-schema-compat.js");
|
|
4
4
|
//#region src/protocols/rest/list-tools.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_logger = require("./logger-BSKbuM66.cjs");
|
|
2
2
|
const require_errors = require("./errors-CN6Da8iz.cjs");
|
|
3
|
-
const require_cors = require("./cors-
|
|
3
|
+
const require_cors = require("./cors-CzTj3-nh.cjs");
|
|
4
4
|
const require_content = require("./content-NCYIGgOb.cjs");
|
|
5
5
|
let _modelcontextprotocol_sdk_server_mcp_js = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
6
6
|
let _modelcontextprotocol_sdk_server_webStandardStreamableHttp_js = require("@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js");
|
|
@@ -16,7 +16,10 @@ function statelessMethodNotAllowed() {
|
|
|
16
16
|
}
|
|
17
17
|
}, {
|
|
18
18
|
status: 405,
|
|
19
|
-
headers: {
|
|
19
|
+
headers: {
|
|
20
|
+
Allow: STATELESS_ALLOW_METHODS,
|
|
21
|
+
"Cache-Control": "no-store"
|
|
22
|
+
}
|
|
20
23
|
});
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
@@ -98,9 +101,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
|
|
|
98
101
|
*/
|
|
99
102
|
function createMcpProtocolHandler(mcp, options = {}) {
|
|
100
103
|
const authorizer = require_cors.createRequestAuthorizer(mcp, options);
|
|
101
|
-
const handle = async (request, recorder) => {
|
|
102
|
-
const authResult = await authorizer.authorize(request, recorder);
|
|
103
|
-
if (!authResult.ok) return authResult.response;
|
|
104
|
+
const handle = async (request, authResult, recorder) => {
|
|
104
105
|
try {
|
|
105
106
|
const server = new _modelcontextprotocol_sdk_server_mcp_js.McpServer({
|
|
106
107
|
name: mcp.name,
|
|
@@ -141,8 +142,10 @@ function createMcpProtocolHandler(mcp, options = {}) {
|
|
|
141
142
|
};
|
|
142
143
|
return async (request, recorder = require_cors.createNoopRecorder()) => {
|
|
143
144
|
if (request.method === "OPTIONS") return require_cors.corsPreflightResponse(STATELESS_ALLOW_METHODS);
|
|
145
|
+
const authResult = await authorizer.authorize(request, recorder);
|
|
146
|
+
if (!authResult.ok) return require_cors.withCors(authResult.response);
|
|
144
147
|
if (request.method !== "POST") return require_cors.withCors(statelessMethodNotAllowed());
|
|
145
|
-
return require_cors.withCors(await handle(request, recorder));
|
|
148
|
+
return require_cors.withCors(await handle(request, authResult, recorder));
|
|
146
149
|
};
|
|
147
150
|
}
|
|
148
151
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as log, r as describeError } from "./logger-3-kwsF-5.js";
|
|
2
2
|
import { i as ToolContext, n as errorSummary, r as resolveToolErrorMessage } from "./errors-DSe96Ffd.js";
|
|
3
|
-
import { d as nowMs, i as createRequestAuthorizer, n as withCors, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-
|
|
3
|
+
import { d as nowMs, i as createRequestAuthorizer, n as withCors, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-D1m2Ud44.js";
|
|
4
4
|
import { t as extractTextContent } from "./content-D5LJAHyM.js";
|
|
5
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
6
|
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
@@ -16,7 +16,10 @@ function statelessMethodNotAllowed() {
|
|
|
16
16
|
}
|
|
17
17
|
}, {
|
|
18
18
|
status: 405,
|
|
19
|
-
headers: {
|
|
19
|
+
headers: {
|
|
20
|
+
Allow: STATELESS_ALLOW_METHODS,
|
|
21
|
+
"Cache-Control": "no-store"
|
|
22
|
+
}
|
|
20
23
|
});
|
|
21
24
|
}
|
|
22
25
|
/**
|
|
@@ -98,9 +101,7 @@ function adaptToolToSdkCallback(tool, auth, recorder) {
|
|
|
98
101
|
*/
|
|
99
102
|
function createMcpProtocolHandler(mcp, options = {}) {
|
|
100
103
|
const authorizer = createRequestAuthorizer(mcp, options);
|
|
101
|
-
const handle = async (request, recorder) => {
|
|
102
|
-
const authResult = await authorizer.authorize(request, recorder);
|
|
103
|
-
if (!authResult.ok) return authResult.response;
|
|
104
|
+
const handle = async (request, authResult, recorder) => {
|
|
104
105
|
try {
|
|
105
106
|
const server = new McpServer({
|
|
106
107
|
name: mcp.name,
|
|
@@ -141,8 +142,10 @@ function createMcpProtocolHandler(mcp, options = {}) {
|
|
|
141
142
|
};
|
|
142
143
|
return async (request, recorder = createNoopRecorder()) => {
|
|
143
144
|
if (request.method === "OPTIONS") return corsPreflightResponse(STATELESS_ALLOW_METHODS);
|
|
145
|
+
const authResult = await authorizer.authorize(request, recorder);
|
|
146
|
+
if (!authResult.ok) return withCors(authResult.response);
|
|
144
147
|
if (request.method !== "POST") return withCors(statelessMethodNotAllowed());
|
|
145
|
-
return withCors(await handle(request, recorder));
|
|
148
|
+
return withCors(await handle(request, authResult, recorder));
|
|
146
149
|
};
|
|
147
150
|
}
|
|
148
151
|
//#endregion
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as createMcpProtocolHandler } from "../../mcp-
|
|
1
|
+
import { t as createMcpProtocolHandler } from "../../mcp-DlbNiP7o.js";
|
|
2
2
|
export { createMcpProtocolHandler };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_logger = require("../logger-BSKbuM66.cjs");
|
|
3
|
-
const require_cors = require("../cors-
|
|
3
|
+
const require_cors = require("../cors-CzTj3-nh.cjs");
|
|
4
4
|
//#region src/protocols/oauth-metadata.ts
|
|
5
5
|
function notFound() {
|
|
6
6
|
return require_cors.withCors(new Response(JSON.stringify({ error: "not found" }), {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as log, r as describeError } from "../logger-3-kwsF-5.js";
|
|
2
|
-
import { a as getOAuthRuntime, c as resolveProtectedResource, f as JSON_HEADERS, m as methodNotAllowed, n as withCors, o as oauthConfigurationErrorResponse, p as headResponse, t as corsPreflightResponse } from "../cors-
|
|
2
|
+
import { a as getOAuthRuntime, c as resolveProtectedResource, f as JSON_HEADERS, m as methodNotAllowed, n as withCors, o as oauthConfigurationErrorResponse, p as headResponse, t as corsPreflightResponse } from "../cors-D1m2Ud44.js";
|
|
3
3
|
//#region src/protocols/oauth-metadata.ts
|
|
4
4
|
function notFound() {
|
|
5
5
|
return withCors(new Response(JSON.stringify({ error: "not found" }), {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_list_tools = require("../../list-tools-
|
|
3
|
-
const require_rest = require("../../rest-
|
|
2
|
+
const require_list_tools = require("../../list-tools-wQ13O3WE.cjs");
|
|
3
|
+
const require_rest = require("../../rest-B9OtLlIc.cjs");
|
|
4
4
|
exports.createInvokeToolHandler = require_rest.createInvokeToolHandler;
|
|
5
5
|
exports.createListToolsHandler = require_list_tools.createListToolsHandler;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as createListToolsHandler } from "../../list-tools-
|
|
2
|
-
import { t as createInvokeToolHandler } from "../../rest-
|
|
1
|
+
import { n as createListToolsHandler } from "../../list-tools-CTtFfDLi.js";
|
|
2
|
+
import { t as createInvokeToolHandler } from "../../rest-BTK8v5-l.js";
|
|
3
3
|
export { createInvokeToolHandler, createListToolsHandler };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_errors = require("./errors-CN6Da8iz.cjs");
|
|
2
|
-
const require_cors = require("./cors-
|
|
2
|
+
const require_cors = require("./cors-CzTj3-nh.cjs");
|
|
3
3
|
const require_content = require("./content-NCYIGgOb.cjs");
|
|
4
|
-
require("./list-tools-
|
|
4
|
+
require("./list-tools-wQ13O3WE.cjs");
|
|
5
5
|
let _modelcontextprotocol_sdk_server_zod_compat_js = require("@modelcontextprotocol/sdk/server/zod-compat.js");
|
|
6
6
|
//#region src/protocols/rest/invoke-tool.ts
|
|
7
7
|
const MAX_REFLECTED_TOOL_NAME = 256;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as ToolContext, n as errorSummary, r as resolveToolErrorMessage } from "./errors-DSe96Ffd.js";
|
|
2
|
-
import { d as nowMs, f as JSON_HEADERS, i as createRequestAuthorizer, m as methodNotAllowed, n as withCors, r as assertRestResourceBinding, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-
|
|
2
|
+
import { d as nowMs, f as JSON_HEADERS, i as createRequestAuthorizer, m as methodNotAllowed, n as withCors, r as assertRestResourceBinding, t as corsPreflightResponse, u as createNoopRecorder } from "./cors-D1m2Ud44.js";
|
|
3
3
|
import { t as extractTextContent } from "./content-D5LJAHyM.js";
|
|
4
|
-
import "./list-tools-
|
|
4
|
+
import "./list-tools-CTtFfDLi.js";
|
|
5
5
|
import { getParseErrorMessage, objectFromShape, safeParseAsync } from "@modelcontextprotocol/sdk/server/zod-compat.js";
|
|
6
6
|
//#region src/protocols/rest/invoke-tool.ts
|
|
7
7
|
const MAX_REFLECTED_TOOL_NAME = 256;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_logger = require("../../logger-BSKbuM66.cjs");
|
|
3
|
-
const require_cors = require("../../cors-
|
|
3
|
+
const require_cors = require("../../cors-CzTj3-nh.cjs");
|
|
4
4
|
const require_metadata_path = require("../../metadata-path-zd7NSNoa.cjs");
|
|
5
|
-
const require_mcp = require("../../mcp-
|
|
5
|
+
const require_mcp = require("../../mcp-CG_9H8CN.cjs");
|
|
6
6
|
const require_protocols_oauth_metadata = require("../../protocols/oauth-metadata.cjs");
|
|
7
|
-
const require_list_tools = require("../../list-tools-
|
|
8
|
-
const require_rest = require("../../rest-
|
|
7
|
+
const require_list_tools = require("../../list-tools-wQ13O3WE.cjs");
|
|
8
|
+
const require_rest = require("../../rest-B9OtLlIc.cjs");
|
|
9
9
|
const require_forwarded = require("../../forwarded-Pi8Hs5Ps.cjs");
|
|
10
10
|
const require_paths = require("../../paths-OP318a6c.cjs");
|
|
11
11
|
//#region src/stacks/supabase/handler.ts
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { s as trimTrailingSlash } from "../../logger-3-kwsF-5.js";
|
|
2
|
-
import { l as createRecorderForRuntime, s as assertResourcePathShape } from "../../cors-
|
|
2
|
+
import { l as createRecorderForRuntime, s as assertResourcePathShape } from "../../cors-D1m2Ud44.js";
|
|
3
3
|
import { t as OAUTH_PROTECTED_RESOURCE_METADATA_PATH } from "../../metadata-path-CAkNcfyY.js";
|
|
4
|
-
import { t as createMcpProtocolHandler } from "../../mcp-
|
|
4
|
+
import { t as createMcpProtocolHandler } from "../../mcp-DlbNiP7o.js";
|
|
5
5
|
import { createOAuthProtectedResourceMetadataHandler } from "../../protocols/oauth-metadata.js";
|
|
6
|
-
import { n as createListToolsHandler } from "../../list-tools-
|
|
7
|
-
import { t as createInvokeToolHandler } from "../../rest-
|
|
6
|
+
import { n as createListToolsHandler } from "../../list-tools-CTtFfDLi.js";
|
|
7
|
+
import { t as createInvokeToolHandler } from "../../rest-BTK8v5-l.js";
|
|
8
8
|
import { t as applyForwardedOrigin } from "../../forwarded--h4efJy-.js";
|
|
9
9
|
import { n as assertFunctionName, t as FUNCTIONS_MOUNT_PREFIX } from "../../paths-IS65L6TA.js";
|
|
10
10
|
//#region src/stacks/supabase/handler.ts
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_package = require("../../package-
|
|
5
|
+
const require_package = require("../../package-oSicfX7m.cjs");
|
|
6
6
|
const require_fs_errors = require("../../fs-errors-CWNzOV75.cjs");
|
|
7
7
|
const require_supabase_config = require("../../supabase-config-Dz7dnUv0.cjs");
|
|
8
8
|
const require_paths = require("../../paths-OP318a6c.cjs");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as version } from "../../package-
|
|
1
|
+
import { t as version } from "../../package-Cr1oDeFn.js";
|
|
2
2
|
import { t as isFileMissing } from "../../fs-errors-PA2t1TIp.js";
|
|
3
3
|
import { t as readSupabaseProjectRef } from "../../supabase-config-CakTU8YF.js";
|
|
4
4
|
import { n as assertFunctionName, t as FUNCTIONS_MOUNT_PREFIX } from "../../paths-IS65L6TA.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_cors = require("../../cors-
|
|
3
|
-
const require_mcp = require("../../mcp-
|
|
2
|
+
const require_cors = require("../../cors-CzTj3-nh.cjs");
|
|
3
|
+
const require_mcp = require("../../mcp-CG_9H8CN.cjs");
|
|
4
4
|
const require_protocols_oauth_metadata = require("../../protocols/oauth-metadata.cjs");
|
|
5
|
-
const require_list_tools = require("../../list-tools-
|
|
6
|
-
const require_rest = require("../../rest-
|
|
5
|
+
const require_list_tools = require("../../list-tools-wQ13O3WE.cjs");
|
|
6
|
+
const require_rest = require("../../rest-B9OtLlIc.cjs");
|
|
7
7
|
const require_forwarded = require("../../forwarded-Pi8Hs5Ps.cjs");
|
|
8
8
|
//#region src/stacks/tanstack/handlers.ts
|
|
9
9
|
const STACK = "tanstack";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { l as createRecorderForRuntime } from "../../cors-
|
|
2
|
-
import { t as createMcpProtocolHandler } from "../../mcp-
|
|
1
|
+
import { l as createRecorderForRuntime } from "../../cors-D1m2Ud44.js";
|
|
2
|
+
import { t as createMcpProtocolHandler } from "../../mcp-DlbNiP7o.js";
|
|
3
3
|
import { createOAuthProtectedResourceMetadataHandler } from "../../protocols/oauth-metadata.js";
|
|
4
|
-
import { n as createListToolsHandler } from "../../list-tools-
|
|
5
|
-
import { t as createInvokeToolHandler } from "../../rest-
|
|
4
|
+
import { n as createListToolsHandler } from "../../list-tools-CTtFfDLi.js";
|
|
5
|
+
import { t as createInvokeToolHandler } from "../../rest-BTK8v5-l.js";
|
|
6
6
|
import { t as applyForwardedOrigin } from "../../forwarded--h4efJy-.js";
|
|
7
7
|
//#region src/stacks/tanstack/handlers.ts
|
|
8
8
|
const STACK = "tanstack";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lovable.dev/mcp-js",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.3",
|
|
4
4
|
"description": "Author MCP servers for Lovable apps. Declare tools with defineTool, register them in defineMcp, and a framework adapter (TanStack or Supabase Edge Functions) emits the route(s) at build time.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|