@clipform/mcp-server 1.22.1 → 1.22.2
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/{chunk-DDSNGWKB.js → chunk-G727XWN4.js} +6 -4
- package/dist/chunk-G727XWN4.js.map +1 -0
- package/dist/{chunk-CN4LJK36.js → chunk-H3DV5X53.js} +157 -1460
- package/dist/{chunk-CN4LJK36.js.map → chunk-H3DV5X53.js.map} +1 -1
- package/dist/{chunk-DWFACCUE.js → chunk-LMGXTF23.js} +67 -94
- package/dist/{chunk-DWFACCUE.js.map → chunk-LMGXTF23.js.map} +1 -1
- package/dist/chunk-ZDSVE6D3.js +2023 -0
- package/dist/chunk-ZDSVE6D3.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/prompts.d.ts +8 -17
- package/dist/prompts.js +2 -18
- package/dist/resources.d.ts +5 -4
- package/dist/resources.js +2 -2
- package/dist/server.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-DDSNGWKB.js.map +0 -1
- package/dist/chunk-Z7CP5LVY.js +0 -188
- package/dist/chunk-Z7CP5LVY.js.map +0 -1
package/dist/chunk-Z7CP5LVY.js
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getMcpAuth
|
|
3
|
-
} from "./chunk-HCZI2UJ5.js";
|
|
4
|
-
|
|
5
|
-
// src/lib/telemetry.ts
|
|
6
|
-
var telemetryEnabled = process.env.DO_NOT_TRACK !== "1" && process.env.CLIPFORM_TELEMETRY !== "off";
|
|
7
|
-
var mcpVersion = "unknown";
|
|
8
|
-
function setMcpVersion(version) {
|
|
9
|
-
mcpVersion = version;
|
|
10
|
-
}
|
|
11
|
-
function getApiBaseUrl() {
|
|
12
|
-
return process.env.API_URL || null;
|
|
13
|
-
}
|
|
14
|
-
function reportError(report) {
|
|
15
|
-
if (!telemetryEnabled) return;
|
|
16
|
-
const base = getApiBaseUrl();
|
|
17
|
-
if (!base) return;
|
|
18
|
-
const payload = {
|
|
19
|
-
...report,
|
|
20
|
-
error_message: report.error_message.slice(0, 500),
|
|
21
|
-
mcp_version: mcpVersion,
|
|
22
|
-
runtime: detectRuntime(),
|
|
23
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
24
|
-
};
|
|
25
|
-
fetch(`${base}/v1/telemetry/errors`, {
|
|
26
|
-
method: "POST",
|
|
27
|
-
headers: { "Content-Type": "application/json" },
|
|
28
|
-
body: JSON.stringify(payload),
|
|
29
|
-
signal: AbortSignal.timeout(2e3)
|
|
30
|
-
}).catch(() => {
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
function isServerFault(status) {
|
|
34
|
-
return status >= 500;
|
|
35
|
-
}
|
|
36
|
-
function detectRuntime() {
|
|
37
|
-
if (process.env.CLAUDE_CODE) return "claude-code";
|
|
38
|
-
if (process.env.CURSOR_SESSION_ID) return "cursor";
|
|
39
|
-
return "stdio";
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// src/lib/api-client.ts
|
|
43
|
-
function getApiBaseUrl2() {
|
|
44
|
-
const url = process.env.API_URL;
|
|
45
|
-
if (!url) {
|
|
46
|
-
throw new Error(
|
|
47
|
-
"API_URL must be set (e.g. http://localhost:3003 or https://api.clipform.io)"
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
return url;
|
|
51
|
-
}
|
|
52
|
-
function getAuthHeaders() {
|
|
53
|
-
const authCtx = getMcpAuth();
|
|
54
|
-
const apiKey = authCtx?.api_key || process.env.CLIPFORM_API_KEY;
|
|
55
|
-
if (!apiKey) {
|
|
56
|
-
throw new Error("CLIPFORM_API_KEY must be set.");
|
|
57
|
-
}
|
|
58
|
-
return { "Authorization": `Bearer ${apiKey}` };
|
|
59
|
-
}
|
|
60
|
-
async function callApi(path, options = {}) {
|
|
61
|
-
const { body, params, timeoutMs = 3e4 } = options;
|
|
62
|
-
const method = options.method || (body ? "POST" : "GET");
|
|
63
|
-
const base = getApiBaseUrl2();
|
|
64
|
-
const prefix = path.startsWith("/internal/") ? "" : "/v1";
|
|
65
|
-
let url = `${base}${prefix}${path}`;
|
|
66
|
-
if (params) {
|
|
67
|
-
const searchParams = new URLSearchParams(params);
|
|
68
|
-
url += `?${searchParams.toString()}`;
|
|
69
|
-
}
|
|
70
|
-
const headers = {
|
|
71
|
-
"Content-Type": "application/json",
|
|
72
|
-
...getAuthHeaders()
|
|
73
|
-
};
|
|
74
|
-
const fetchOptions = {
|
|
75
|
-
method,
|
|
76
|
-
headers,
|
|
77
|
-
signal: AbortSignal.timeout(timeoutMs)
|
|
78
|
-
};
|
|
79
|
-
if (body && method !== "GET") {
|
|
80
|
-
fetchOptions.body = JSON.stringify(body);
|
|
81
|
-
}
|
|
82
|
-
let response;
|
|
83
|
-
try {
|
|
84
|
-
response = await fetch(url, fetchOptions);
|
|
85
|
-
} catch (err) {
|
|
86
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
87
|
-
reportError({
|
|
88
|
-
error_type: "connection_error",
|
|
89
|
-
error_message: message,
|
|
90
|
-
tool_name: getMcpAuth()?.tool_name,
|
|
91
|
-
api_path: `${prefix}${path}`
|
|
92
|
-
});
|
|
93
|
-
return {
|
|
94
|
-
ok: false,
|
|
95
|
-
status: 0,
|
|
96
|
-
error: `Failed to connect to API at ${url}.
|
|
97
|
-
|
|
98
|
-
Error: ${message}`
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
if (response.status === 204) {
|
|
102
|
-
return { ok: true, data: {} };
|
|
103
|
-
}
|
|
104
|
-
const data = await response.json();
|
|
105
|
-
if (!response.ok) {
|
|
106
|
-
const errorMsg = data.error || `API error (${response.status})`;
|
|
107
|
-
if (isServerFault(response.status)) {
|
|
108
|
-
reportError({
|
|
109
|
-
error_type: `http_${response.status}`,
|
|
110
|
-
error_message: errorMsg,
|
|
111
|
-
tool_name: getMcpAuth()?.tool_name,
|
|
112
|
-
status_code: response.status,
|
|
113
|
-
api_path: `${prefix}${path}`
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
ok: false,
|
|
118
|
-
status: response.status,
|
|
119
|
-
error: errorMsg
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
return { ok: true, data };
|
|
123
|
-
}
|
|
124
|
-
function errorResult(message) {
|
|
125
|
-
return {
|
|
126
|
-
content: [{ type: "text", text: message }],
|
|
127
|
-
isError: true
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
function textResult(text) {
|
|
131
|
-
return {
|
|
132
|
-
content: [{ type: "text", text }]
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// src/lib/session-context.ts
|
|
137
|
-
async function getSessionContext() {
|
|
138
|
-
let result;
|
|
139
|
-
try {
|
|
140
|
-
result = await callApi("/me", { method: "GET" });
|
|
141
|
-
} catch {
|
|
142
|
-
return "";
|
|
143
|
-
}
|
|
144
|
-
if (!result.ok) return "";
|
|
145
|
-
const me = result.data;
|
|
146
|
-
const plan = me.plan;
|
|
147
|
-
const lines = [];
|
|
148
|
-
lines.push("## Your Session");
|
|
149
|
-
if (me.auth_mode === "oauth") {
|
|
150
|
-
lines.push(`Auth: OAuth (connected)`);
|
|
151
|
-
lines.push(`Workspace: ${me.workspace?.name ?? "Unknown"} (${me.workspace?.id ?? "?"})`);
|
|
152
|
-
lines.push(`User: ${me.user_id ?? "?"}`);
|
|
153
|
-
lines.push(`Company: ${me.company_id ?? "none"}`);
|
|
154
|
-
} else {
|
|
155
|
-
lines.push("Auth: anonymous (not connected to a Clipform account)");
|
|
156
|
-
if (me.workspace) {
|
|
157
|
-
lines.push(`Workspace: ${me.workspace.name} (${me.workspace.id})`);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
lines.push(`Plan: ${plan.name} (tier ${plan.tier})`);
|
|
161
|
-
if (plan.node_limit !== null) {
|
|
162
|
-
lines.push(`Question limit: ${plan.node_limit} per form`);
|
|
163
|
-
} else {
|
|
164
|
-
lines.push("Questions: unlimited");
|
|
165
|
-
}
|
|
166
|
-
if (plan.form_limit !== null) {
|
|
167
|
-
lines.push(`Form limit: ${plan.form_limit} forms`);
|
|
168
|
-
} else {
|
|
169
|
-
lines.push("Forms: unlimited");
|
|
170
|
-
}
|
|
171
|
-
if (plan.custom_theme === false) {
|
|
172
|
-
lines.push("Custom themes: not available on this plan");
|
|
173
|
-
}
|
|
174
|
-
if (me.auth_mode !== "oauth") {
|
|
175
|
-
lines.push(`
|
|
176
|
-
To unlock your full plan: sign in to your Clipform account.`);
|
|
177
|
-
}
|
|
178
|
-
return lines.join("\n");
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export {
|
|
182
|
-
setMcpVersion,
|
|
183
|
-
callApi,
|
|
184
|
-
errorResult,
|
|
185
|
-
textResult,
|
|
186
|
-
getSessionContext
|
|
187
|
-
};
|
|
188
|
-
//# sourceMappingURL=chunk-Z7CP5LVY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/telemetry.ts","../src/lib/api-client.ts","../src/lib/session-context.ts"],"sourcesContent":["const telemetryEnabled =\n process.env.DO_NOT_TRACK !== \"1\" &&\n process.env.CLIPFORM_TELEMETRY !== \"off\";\n\nlet mcpVersion = \"unknown\";\n\nexport function setMcpVersion(version: string) {\n mcpVersion = version;\n}\n\nfunction getApiBaseUrl(): string | null {\n return process.env.API_URL || null;\n}\n\nexport interface ErrorReport {\n error_type: string;\n error_message: string;\n tool_name?: string;\n status_code?: number;\n api_path?: string;\n}\n\nexport function reportError(report: ErrorReport) {\n if (!telemetryEnabled) return;\n const base = getApiBaseUrl();\n if (!base) return;\n\n const payload = {\n ...report,\n error_message: report.error_message.slice(0, 500),\n mcp_version: mcpVersion,\n runtime: detectRuntime(),\n timestamp: new Date().toISOString(),\n };\n\n fetch(`${base}/v1/telemetry/errors`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(2_000),\n }).catch(() => {});\n}\n\nexport function isServerFault(status: number): boolean {\n return status >= 500;\n}\n\nfunction detectRuntime(): string {\n if (process.env.CLAUDE_CODE) return \"claude-code\";\n if (process.env.CURSOR_SESSION_ID) return \"cursor\";\n return \"stdio\";\n}\n","import { getMcpAuth } from \"./auth-context.js\";\nimport { reportError, isServerFault } from \"./telemetry.js\";\n\nfunction getApiBaseUrl(): string {\n const url = process.env.API_URL;\n if (!url) {\n throw new Error(\n \"API_URL must be set (e.g. http://localhost:3003 or https://api.clipform.io)\"\n );\n }\n return url;\n}\n\n\nfunction getAuthHeaders(): Record<string, string> {\n const authCtx = getMcpAuth();\n const apiKey = authCtx?.api_key || process.env.CLIPFORM_API_KEY;\n if (!apiKey) {\n throw new Error(\"CLIPFORM_API_KEY must be set.\");\n }\n\n return { \"Authorization\": `Bearer ${apiKey}` };\n}\n\ninterface ApiOptions {\n method?: string;\n body?: Record<string, unknown>;\n params?: Record<string, string>;\n timeoutMs?: number;\n}\n\ntype ApiResult =\n | { ok: true; data: Record<string, unknown> }\n | { ok: false; status: number; error: string };\n\nexport async function callApi(\n path: string,\n options: ApiOptions = {}\n): Promise<ApiResult> {\n const { body, params, timeoutMs = 30_000 } = options;\n const method = options.method || (body ? \"POST\" : \"GET\");\n\n const base = getApiBaseUrl();\n const prefix = path.startsWith(\"/internal/\") ? \"\" : \"/v1\";\n let url = `${base}${prefix}${path}`;\n if (params) {\n const searchParams = new URLSearchParams(params);\n url += `?${searchParams.toString()}`;\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...getAuthHeaders(),\n };\n\n const fetchOptions: RequestInit = {\n method,\n headers,\n signal: AbortSignal.timeout(timeoutMs),\n };\n\n if (body && method !== \"GET\") {\n fetchOptions.body = JSON.stringify(body);\n }\n\n let response: Response;\n try {\n response = await fetch(url, fetchOptions);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n reportError({\n error_type: \"connection_error\",\n error_message: message,\n tool_name: getMcpAuth()?.tool_name,\n api_path: `${prefix}${path}`,\n });\n return {\n ok: false,\n status: 0,\n error: `Failed to connect to API at ${url}.\\n\\nError: ${message}`,\n };\n }\n\n if (response.status === 204) {\n return { ok: true, data: {} };\n }\n\n const data = (await response.json()) as Record<string, unknown>;\n\n if (!response.ok) {\n const errorMsg = (data.error as string) || `API error (${response.status})`;\n if (isServerFault(response.status)) {\n reportError({\n error_type: `http_${response.status}`,\n error_message: errorMsg,\n tool_name: getMcpAuth()?.tool_name,\n status_code: response.status,\n api_path: `${prefix}${path}`,\n });\n }\n return {\n ok: false,\n status: response.status,\n error: errorMsg,\n };\n }\n\n return { ok: true, data };\n}\n\nexport function errorResult(message: string) {\n return {\n content: [{ type: \"text\" as const, text: message }],\n isError: true,\n };\n}\n\nexport function textResult(text: string) {\n return {\n content: [{ type: \"text\" as const, text }],\n };\n}\n","import { BUSINESS } from \"@vid-master/config\";\nimport { callApi } from \"./api-client.js\";\n\nexport async function getSessionContext(): Promise<string> {\n let result;\n try {\n result = await callApi(\"/me\", { method: \"GET\" });\n } catch {\n return \"\";\n }\n if (!result.ok) return \"\";\n\n const me = result.data as any;\n const plan = me.plan;\n const lines: string[] = [];\n\n lines.push(\"## Your Session\");\n if (me.auth_mode === \"oauth\") {\n lines.push(`Auth: OAuth (connected)`);\n lines.push(`Workspace: ${me.workspace?.name ?? \"Unknown\"} (${me.workspace?.id ?? \"?\"})`);\n lines.push(`User: ${me.user_id ?? \"?\"}`);\n lines.push(`Company: ${me.company_id ?? \"none\"}`);\n } else {\n lines.push(\"Auth: anonymous (not connected to a Clipform account)\");\n if (me.workspace) {\n lines.push(`Workspace: ${me.workspace.name} (${me.workspace.id})`);\n }\n }\n lines.push(`Plan: ${plan.name} (tier ${plan.tier})`);\n if (plan.node_limit !== null) {\n lines.push(`Question limit: ${plan.node_limit} per form`);\n } else {\n lines.push(\"Questions: unlimited\");\n }\n if (plan.form_limit !== null) {\n lines.push(`Form limit: ${plan.form_limit} forms`);\n } else {\n lines.push(\"Forms: unlimited\");\n }\n if (plan.custom_theme === false) {\n lines.push(\"Custom themes: not available on this plan\");\n }\n if (me.auth_mode !== \"oauth\") {\n lines.push(`\\nTo unlock your full plan: sign in to your Clipform account.`);\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":["getApiBaseUrl"]}
|