@runapi.ai/mcp-core 0.1.1 → 0.1.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/contract.d.ts +1 -0
- package/dist/contract.js +48 -0
- package/dist/contract.js.map +1 -1
- package/dist/server.d.ts +1 -2
- package/dist/server.js +12 -7
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/dist/contract.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare function findModel(model: string, source: Contract): ModelInfo |
|
|
|
9
9
|
export declare function findModels(model: string, source: Contract): ModelInfo[];
|
|
10
10
|
export declare function findModelForAction(service: string, action: string, model: string | undefined, source: Contract): ModelInfo | undefined;
|
|
11
11
|
export declare function fieldsForModel(action: ContractAction, model: string): Record<string, ContractField>;
|
|
12
|
+
export declare function declaredFieldsForAction(action: ContractAction): Record<string, ContractField>;
|
|
12
13
|
export declare function fieldSummary(fields: Record<string, ContractField>): {
|
|
13
14
|
name: string;
|
|
14
15
|
required: boolean;
|
package/dist/contract.js
CHANGED
|
@@ -75,6 +75,54 @@ export function findModelForAction(service, action, model, source) {
|
|
|
75
75
|
export function fieldsForModel(action, model) {
|
|
76
76
|
return action.fields_by_model[model] || action.fields_by_model._ || {};
|
|
77
77
|
}
|
|
78
|
+
const RESERVED_DECLARED_FIELDS = new Set(["model"]);
|
|
79
|
+
// Union of every roster's fields for an action's advertised tool schema.
|
|
80
|
+
//
|
|
81
|
+
// Canonical fields share type/shape across models (ADR-0007); what diverges per
|
|
82
|
+
// model is the allowed value set and whether the field is required. So the
|
|
83
|
+
// advertised schema is the loosest envelope that accepts every model's valid
|
|
84
|
+
// input, and the per-model runtime check (validateParams against the resolved
|
|
85
|
+
// roster) does the precise enforcement:
|
|
86
|
+
// - required: only when required in every roster (the safe intersection);
|
|
87
|
+
// divergent-required fields stay optional here.
|
|
88
|
+
// - enum: the union of every roster's values, but only when every roster that
|
|
89
|
+
// defines the field constrains it — if any model leaves it free-form, the
|
|
90
|
+
// field is advertised unconstrained. Otherwise the declared schema could
|
|
91
|
+
// reject a value valid for one model before its runtime check runs.
|
|
92
|
+
// - other constraints (type/min/max): first-seen, since canonical fields do
|
|
93
|
+
// not diverge on those.
|
|
94
|
+
export function declaredFieldsForAction(action) {
|
|
95
|
+
const rosters = action.models.length > 0 ? action.models : ["_"];
|
|
96
|
+
const defsByName = new Map();
|
|
97
|
+
const order = [];
|
|
98
|
+
for (const roster of rosters) {
|
|
99
|
+
for (const [name, field] of Object.entries(fieldsForModel(action, roster))) {
|
|
100
|
+
if (RESERVED_DECLARED_FIELDS.has(name)) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (!defsByName.has(name)) {
|
|
104
|
+
defsByName.set(name, []);
|
|
105
|
+
order.push(name);
|
|
106
|
+
}
|
|
107
|
+
defsByName.get(name).push(field);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const merged = {};
|
|
111
|
+
for (const name of order) {
|
|
112
|
+
const defs = defsByName.get(name);
|
|
113
|
+
const field = { ...defs[0] };
|
|
114
|
+
if (defs.every((def) => def.enum?.length)) {
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
field.enum = defs.flatMap((def) => def.enum).filter((value) => !seen.has(value) && seen.add(value));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
delete field.enum;
|
|
120
|
+
}
|
|
121
|
+
field.required = rosters.every((roster) => fieldsForModel(action, roster)[name]?.required === true);
|
|
122
|
+
merged[name] = field;
|
|
123
|
+
}
|
|
124
|
+
return merged;
|
|
125
|
+
}
|
|
78
126
|
export function fieldSummary(fields) {
|
|
79
127
|
return Object.entries(fields).map(([name, field]) => ({
|
|
80
128
|
name,
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import type { Contract,
|
|
2
|
+
import type { Contract, InputRule, PricingConfig } from "./types.js";
|
|
3
3
|
import { RunApiClient } from "./runapi-client.js";
|
|
4
4
|
export type ModelServerTool = {
|
|
5
5
|
name: string;
|
|
@@ -7,7 +7,6 @@ export type ModelServerTool = {
|
|
|
7
7
|
service: string;
|
|
8
8
|
action: string;
|
|
9
9
|
models: string[];
|
|
10
|
-
inputSchema: Record<string, ContractField>;
|
|
11
10
|
};
|
|
12
11
|
export type CreateModelServerOptions = {
|
|
13
12
|
name: string;
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
-
import { findModelForAction } from "./contract.js";
|
|
3
|
+
import { declaredFieldsForAction, findAction, findModelForAction } from "./contract.js";
|
|
4
4
|
import { priceForModel } from "./pricing.js";
|
|
5
5
|
import { validateInputRules } from "./input-rules.js";
|
|
6
6
|
import { validateParams, zodShapeForFields } from "./schema.js";
|
|
@@ -23,7 +23,9 @@ export function createModelServer(options) {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
for (const tool of tools) {
|
|
26
|
-
|
|
26
|
+
const action = findAction(tool.service, tool.action, contract);
|
|
27
|
+
const declaredFields = action ? declaredFieldsForAction(action) : {};
|
|
28
|
+
server.tool(tool.name, tool.description, toolShape(declaredFields, tool.models), async (args, extra) => {
|
|
27
29
|
const { wait = true, timeout_ms, poll_interval_ms, model, ...params } = args;
|
|
28
30
|
try {
|
|
29
31
|
const info = findModelForAction(tool.service, tool.action, model, contract);
|
|
@@ -33,10 +35,13 @@ export function createModelServer(options) {
|
|
|
33
35
|
hint: "This model server was generated for a specific model line; verify the requested model."
|
|
34
36
|
});
|
|
35
37
|
}
|
|
38
|
+
// Validate against the resolved model's own field roster so divergent
|
|
39
|
+
// per-model required fields are enforced correctly (the advertised tool
|
|
40
|
+
// schema declares the union with required relaxed to the intersection).
|
|
36
41
|
// Send the resolved model (explicit arg or the line's default) so
|
|
37
42
|
// model-optional create calls still satisfy endpoints that require it.
|
|
38
43
|
// No-model endpoints (models: []) resolve without a model — omit it.
|
|
39
|
-
const body = validateParams(
|
|
44
|
+
const body = validateParams(info.fields, {
|
|
40
45
|
...params,
|
|
41
46
|
...(info.model ? { model: info.model } : {})
|
|
42
47
|
});
|
|
@@ -90,15 +95,15 @@ export function createModelServer(options) {
|
|
|
90
95
|
}
|
|
91
96
|
return server;
|
|
92
97
|
}
|
|
93
|
-
function toolShape(
|
|
98
|
+
function toolShape(fields, models) {
|
|
94
99
|
const shape = {
|
|
95
|
-
...zodShapeForFields(
|
|
100
|
+
...zodShapeForFields(fields),
|
|
96
101
|
wait: z.boolean().default(true).describe("Poll until the task reaches a terminal status."),
|
|
97
102
|
timeout_ms: z.number().int().positive().optional(),
|
|
98
103
|
poll_interval_ms: z.number().int().positive().optional()
|
|
99
104
|
};
|
|
100
|
-
if (
|
|
101
|
-
shape.model = z.enum(
|
|
105
|
+
if (models.length > 0) {
|
|
106
|
+
shape.model = z.enum(models).optional().describe("RunAPI model slug for this model line.");
|
|
102
107
|
}
|
|
103
108
|
return shape;
|
|
104
109
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runapi.ai/mcp-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Reusable core for building RunAPI MCP servers: client, contract/pricing/schema queries, input-rule engine, and a createModelServer factory.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|