@apicity/mcp-server 0.1.0-alpha.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.
@@ -0,0 +1,151 @@
1
+ // Minimal Zod 3 → JSON Schema converter. We deliberately do not import zod —
2
+ // providers ship with zod ^3.24 as a peer dep, and we read the schema's
3
+ // internal `_def` at runtime via duck-typing. Anything we can't recognize
4
+ // degrades to `{}` (any JSON value), which is still useful documentation.
5
+ function isZodLike(x) {
6
+ return (typeof x === "object" &&
7
+ x !== null &&
8
+ "_def" in x);
9
+ }
10
+ export function zodToJsonSchema(schema) {
11
+ if (!isZodLike(schema))
12
+ return {};
13
+ const def = schema._def;
14
+ if (!def)
15
+ return {};
16
+ const desc = schema.description || def.description
17
+ ? { description: schema.description ?? def.description }
18
+ : {};
19
+ switch (def.typeName) {
20
+ case "ZodObject": {
21
+ const shape = typeof def.shape === "function" ? def.shape() : {};
22
+ const properties = {};
23
+ const required = [];
24
+ for (const [key, val] of Object.entries(shape)) {
25
+ properties[key] = zodToJsonSchema(val);
26
+ if (!isOptional(val))
27
+ required.push(key);
28
+ }
29
+ return {
30
+ type: "object",
31
+ properties,
32
+ ...(required.length > 0 ? { required } : {}),
33
+ ...desc,
34
+ };
35
+ }
36
+ case "ZodString": {
37
+ const out = { type: "string", ...desc };
38
+ for (const c of def.checks ?? []) {
39
+ if (c.kind === "min")
40
+ out.minLength = c.value;
41
+ if (c.kind === "max")
42
+ out.maxLength = c.value;
43
+ if (c.kind === "url")
44
+ out.format = "uri";
45
+ if (c.kind === "email")
46
+ out.format = "email";
47
+ if (c.kind === "regex" && c.regex)
48
+ out.pattern = c.regex.source;
49
+ }
50
+ return out;
51
+ }
52
+ case "ZodNumber": {
53
+ const out = { type: "number", ...desc };
54
+ let isInt = false;
55
+ for (const c of def.checks ?? []) {
56
+ if (c.kind === "int")
57
+ isInt = true;
58
+ if (c.kind === "min")
59
+ out.minimum = c.value;
60
+ if (c.kind === "max")
61
+ out.maximum = c.value;
62
+ }
63
+ if (isInt)
64
+ out.type = "integer";
65
+ return out;
66
+ }
67
+ case "ZodBigInt":
68
+ return { type: "integer", ...desc };
69
+ case "ZodBoolean":
70
+ return { type: "boolean", ...desc };
71
+ case "ZodNull":
72
+ return { type: "null", ...desc };
73
+ case "ZodArray":
74
+ return { type: "array", items: zodToJsonSchema(def.type), ...desc };
75
+ case "ZodTuple":
76
+ return {
77
+ type: "array",
78
+ items: (def.options ?? []).map((o) => zodToJsonSchema(o)),
79
+ ...desc,
80
+ };
81
+ case "ZodEnum":
82
+ case "ZodNativeEnum": {
83
+ const values = Array.isArray(def.values)
84
+ ? def.values
85
+ : Object.values(def.values ?? {});
86
+ return { type: "string", enum: values, ...desc };
87
+ }
88
+ case "ZodLiteral":
89
+ return { const: def.value, ...desc };
90
+ case "ZodUnion":
91
+ case "ZodDiscriminatedUnion":
92
+ return {
93
+ anyOf: (def.options ?? []).map((o) => zodToJsonSchema(o)),
94
+ ...desc,
95
+ };
96
+ case "ZodIntersection": {
97
+ const left = zodToJsonSchema(def.left);
98
+ const right = zodToJsonSchema(def.right);
99
+ return { allOf: [left, right], ...desc };
100
+ }
101
+ case "ZodOptional":
102
+ case "ZodNullable":
103
+ case "ZodReadonly":
104
+ case "ZodBranded":
105
+ return { ...zodToJsonSchema(def.innerType), ...desc };
106
+ case "ZodDefault":
107
+ return {
108
+ ...zodToJsonSchema(def.innerType),
109
+ default: def.defaultValue?.(),
110
+ ...desc,
111
+ };
112
+ case "ZodEffects":
113
+ return { ...zodToJsonSchema(def.schema), ...desc };
114
+ case "ZodRecord":
115
+ return {
116
+ type: "object",
117
+ additionalProperties: zodToJsonSchema(def.valueType),
118
+ ...desc,
119
+ };
120
+ case "ZodMap":
121
+ return {
122
+ type: "object",
123
+ additionalProperties: zodToJsonSchema(def.valueType),
124
+ ...desc,
125
+ };
126
+ case "ZodAny":
127
+ case "ZodUnknown":
128
+ return { ...desc };
129
+ case "ZodNever":
130
+ return { not: {}, ...desc };
131
+ case "ZodVoid":
132
+ case "ZodUndefined":
133
+ return { type: "null", ...desc };
134
+ case "ZodPipeline":
135
+ return zodToJsonSchema(def.in);
136
+ default:
137
+ return { ...desc };
138
+ }
139
+ }
140
+ function isOptional(schema) {
141
+ if (!isZodLike(schema))
142
+ return true;
143
+ const t = schema._def?.typeName;
144
+ if (t === "ZodOptional" || t === "ZodDefault")
145
+ return true;
146
+ if ((t === "ZodNullable" || t === "ZodReadonly") && schema._def?.innerType) {
147
+ return isOptional(schema._def.innerType);
148
+ }
149
+ return false;
150
+ }
151
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface StartServerOptions {
2
+ outputDir?: string;
3
+ enabledProviders?: string[];
4
+ name?: string;
5
+ version?: string;
6
+ }
7
+ export declare function startServer(opts?: StartServerOptions): Promise<void>;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAC/B,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyCf"}
@@ -0,0 +1,140 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
4
+ import { buildRegistry } from "./registry.js";
5
+ import { zodToJsonSchema } from "./schema.js";
6
+ import { downloadUrlsInResult, guessExtension, isBinary, writeBinary, } from "./output.js";
7
+ export async function startServer(opts = {}) {
8
+ const endpoints = await buildRegistry({
9
+ enabledProviders: opts.enabledProviders,
10
+ });
11
+ const server = new Server({ name: opts.name ?? "apicity", version: opts.version ?? "0.1.0" }, { capabilities: { tools: {} } });
12
+ const byName = new Map(endpoints.map((e) => [e.toolName, e]));
13
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
14
+ tools: endpoints.map((ep) => ({
15
+ name: ep.toolName,
16
+ description: describe(ep, opts.outputDir),
17
+ inputSchema: buildInputSchema(ep),
18
+ })),
19
+ }));
20
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
21
+ const ep = byName.get(req.params.name);
22
+ if (!ep) {
23
+ return errorResult(`Unknown tool: ${req.params.name}`);
24
+ }
25
+ try {
26
+ const result = await invoke(ep, req.params.arguments ?? {});
27
+ return await formatResult(ep, result, opts.outputDir);
28
+ }
29
+ catch (err) {
30
+ return errorResult(`${ep.toolName} failed: ${err.message ?? String(err)}`);
31
+ }
32
+ });
33
+ const transport = new StdioServerTransport();
34
+ await server.connect(transport);
35
+ console.error(`[apicity-mcp] ready — ${endpoints.length} tools registered` +
36
+ (opts.outputDir ? ` (output dir: ${opts.outputDir})` : ""));
37
+ }
38
+ function describe(ep, outputDir) {
39
+ const lines = [`${ep.method} ${ep.fullUrl}`, `Docs: ${ep.docsUrl}`];
40
+ if (outputDir && isMediaEndpoint(ep)) {
41
+ lines.push(`Returned binary or media URLs are saved to: ${outputDir}`);
42
+ }
43
+ if (ep.example) {
44
+ const body = JSON.stringify(ep.example.payload, null, 2);
45
+ const truncated = body.length > 400 ? `${body.slice(0, 400).trimEnd()}\n…` : body;
46
+ lines.push("", `Example (${ep.example.source}):`, truncated);
47
+ }
48
+ return lines.join("\n");
49
+ }
50
+ function isMediaEndpoint(ep) {
51
+ return /audio|image|video|speech|tts|generation|sound|upload|file/i.test(ep.dotPath);
52
+ }
53
+ function buildInputSchema(ep) {
54
+ const body = zodToJsonSchema(ep.schema);
55
+ // If the endpoint takes path params (e.g., {taskId}), wrap them at the top
56
+ // level alongside the body fields and mark them required.
57
+ if (ep.pathParams.length === 0) {
58
+ if (body.type === "object")
59
+ return body;
60
+ return { type: "object", properties: {}, additionalProperties: true };
61
+ }
62
+ const properties = {};
63
+ const required = [];
64
+ for (const p of ep.pathParams) {
65
+ properties[p] = { type: "string", description: `Path param: {${p}}` };
66
+ required.push(p);
67
+ }
68
+ if (body.type === "object" && body.properties) {
69
+ properties.body = body;
70
+ }
71
+ else {
72
+ properties.body = {
73
+ type: "object",
74
+ additionalProperties: true,
75
+ description: "Request body (free-form)",
76
+ };
77
+ }
78
+ return { type: "object", properties, required };
79
+ }
80
+ async function invoke(ep, args) {
81
+ let pathArgs = [];
82
+ let body = args;
83
+ if (ep.pathParams.length > 0) {
84
+ pathArgs = ep.pathParams.map((p) => args[p]);
85
+ body = args.body ?? undefined;
86
+ }
87
+ if (body === undefined ||
88
+ (isPlainObject(body) && Object.keys(body).length === 0)) {
89
+ const result = await ep.fn(...pathArgs);
90
+ return await maybeBuffer(result);
91
+ }
92
+ const result = await ep.fn(...pathArgs, body);
93
+ return await maybeBuffer(result);
94
+ }
95
+ function isPlainObject(v) {
96
+ return typeof v === "object" && v !== null && !Array.isArray(v);
97
+ }
98
+ async function maybeBuffer(value) {
99
+ if (value !== null &&
100
+ typeof value === "object" &&
101
+ Symbol.asyncIterator in value) {
102
+ const buffered = [];
103
+ for await (const chunk of value)
104
+ buffered.push(chunk);
105
+ return buffered;
106
+ }
107
+ return value;
108
+ }
109
+ async function formatResult(ep, result, outputDir) {
110
+ if (isBinary(result)) {
111
+ if (!outputDir) {
112
+ const bytes = result.byteLength;
113
+ return text(`Endpoint returned ${bytes} binary bytes. Pass --output-dir to persist.`);
114
+ }
115
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
116
+ const baseName = `${ep.provider}__${ep.dotPath}__${ts}.${guessExtension(ep.dotPath)}`;
117
+ const out = await writeBinary(result, baseName, outputDir);
118
+ return text(JSON.stringify(out, null, 2));
119
+ }
120
+ let payload = result;
121
+ if (outputDir && payload && typeof payload === "object") {
122
+ payload = await downloadUrlsInResult(payload, outputDir, `${ep.provider}__${ep.dotPath}`);
123
+ }
124
+ return text(safeStringify(payload));
125
+ }
126
+ function text(s) {
127
+ return { content: [{ type: "text", text: s }] };
128
+ }
129
+ function errorResult(message) {
130
+ return { isError: true, content: [{ type: "text", text: message }] };
131
+ }
132
+ function safeStringify(value) {
133
+ try {
134
+ return JSON.stringify(value, null, 2);
135
+ }
136
+ catch {
137
+ return String(value);
138
+ }
139
+ }
140
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,WAAW,GACZ,MAAM,aAAa,CAAC;AASrB,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B,EAAE;IAE7B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC;QACpC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,EAClE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,EAAE,CAAC,QAAQ;YACjB,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;YACzC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;SAClC,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,WAAW,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,MAAM,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAChB,GAAG,EAAE,CAAC,QAAQ,YAAa,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CACX,yBAAyB,SAAS,CAAC,MAAM,mBAAmB;QAC1D,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAAY,EAAE,SAAkB;IAChD,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,SAAS,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,+CAA+C,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,EAAY;IACnC,OAAO,4DAA4D,CAAC,IAAI,CACtE,EAAE,CAAC,OAAO,CACX,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAY;IACpC,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACxC,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAC9B,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC;QACtE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9C,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,GAAG;YAChB,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,IAAI;YAC1B,WAAW,EAAE,0BAA0B;SACxC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,EAAY,EACZ,IAA6B;IAE7B,IAAI,QAAQ,GAAc,EAAE,CAAC;IAC7B,IAAI,IAAI,GAAY,IAAI,CAAC;IACzB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,GAAI,IAAgC,CAAC,IAAI,IAAI,SAAS,CAAC;IAC7D,CAAC;IACD,IACE,IAAI,KAAK,SAAS;QAClB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EACvD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxC,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAc;IACvC,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,aAAa,IAAK,KAAgB,EACzC,CAAC;QACD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAA+B;YACvD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAY,EACZ,MAAe,EACf,SAAkB;IAIlB,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,KAAK,GAAI,MAAmC,CAAC,UAAU,CAAC;YAC9D,OAAO,IAAI,CACT,qBAAqB,KAAK,8CAA8C,CACzE,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,cAAc,CACrE,EAAE,CAAC,OAAO,CACX,EAAE,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,GAAG,MAAM,oBAAoB,CAClC,OAAO,EACP,SAAS,EACT,GAAG,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,OAAO,EAAE,CAChC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,IAAI,CAAC,CAAS;IAGrB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAIlC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,124 @@
1
+ {
2
+ "name": "@apicity/mcp-server",
3
+ "version": "0.1.0-alpha.0",
4
+ "description": "Optional MCP (Model Context Protocol) server that exposes every @apicity provider endpoint as a tool.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/justintanner/apicity.git",
9
+ "directory": "mcp-server"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "type": "module",
15
+ "main": "dist/src/index.js",
16
+ "types": "dist/src/index.d.ts",
17
+ "bin": {
18
+ "apicity-mcp": "dist/src/bin.js"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "import": "./dist/src/index.js",
23
+ "types": "./dist/src/index.d.ts"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md",
29
+ "LICENSE"
30
+ ],
31
+ "sideEffects": false,
32
+ "keywords": [
33
+ "ai",
34
+ "mcp",
35
+ "model-context-protocol",
36
+ "apicity",
37
+ "openai",
38
+ "anthropic",
39
+ "xai",
40
+ "fal",
41
+ "kie",
42
+ "fireworks"
43
+ ],
44
+ "author": "Justin Tanner",
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.29.0"
50
+ },
51
+ "peerDependencies": {
52
+ "@apicity/anthropic": "0.1.0-alpha.0",
53
+ "@apicity/alibaba": "0.1.0-alpha.0",
54
+ "@apicity/fal": "0.1.0-alpha.0",
55
+ "@apicity/elevenlabs": "0.1.0-alpha.0",
56
+ "@apicity/fireworks": "0.1.0-alpha.0",
57
+ "@apicity/free-media-upload": "0.1.0-alpha.0",
58
+ "@apicity/meta": "0.1.0-alpha.0",
59
+ "@apicity/kie": "0.1.0-alpha.0",
60
+ "@apicity/kimicoding": "0.1.0-alpha.0",
61
+ "@apicity/openai": "0.1.0-alpha.0",
62
+ "@apicity/x": "0.1.0-alpha.0",
63
+ "@apicity/xai": "0.1.0-alpha.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "@apicity/alibaba": {
67
+ "optional": true
68
+ },
69
+ "@apicity/anthropic": {
70
+ "optional": true
71
+ },
72
+ "@apicity/elevenlabs": {
73
+ "optional": true
74
+ },
75
+ "@apicity/fal": {
76
+ "optional": true
77
+ },
78
+ "@apicity/fireworks": {
79
+ "optional": true
80
+ },
81
+ "@apicity/free-media-upload": {
82
+ "optional": true
83
+ },
84
+ "@apicity/meta": {
85
+ "optional": true
86
+ },
87
+ "@apicity/kie": {
88
+ "optional": true
89
+ },
90
+ "@apicity/kimicoding": {
91
+ "optional": true
92
+ },
93
+ "@apicity/openai": {
94
+ "optional": true
95
+ },
96
+ "@apicity/x": {
97
+ "optional": true
98
+ },
99
+ "@apicity/xai": {
100
+ "optional": true
101
+ }
102
+ },
103
+ "devDependencies": {
104
+ "@apicity/alibaba": "0.1.0-alpha.0",
105
+ "@apicity/anthropic": "0.1.0-alpha.0",
106
+ "@apicity/fal": "0.1.0-alpha.0",
107
+ "@apicity/fireworks": "0.1.0-alpha.0",
108
+ "@apicity/elevenlabs": "0.1.0-alpha.0",
109
+ "@apicity/meta": "0.1.0-alpha.0",
110
+ "@apicity/free-media-upload": "0.1.0-alpha.0",
111
+ "@apicity/kie": "0.1.0-alpha.0",
112
+ "@apicity/openai": "0.1.0-alpha.0",
113
+ "@apicity/x": "0.1.0-alpha.0",
114
+ "@apicity/kimicoding": "0.1.0-alpha.0",
115
+ "@apicity/xai": "0.1.0-alpha.0"
116
+ },
117
+ "homepage": "https://github.com/justintanner/apicity#readme",
118
+ "bugs": {
119
+ "url": "https://github.com/justintanner/apicity/issues"
120
+ },
121
+ "scripts": {
122
+ "build": "tsc -p tsconfig.json && node scripts/dist.mjs"
123
+ }
124
+ }