riveter-mcp-server 0.1.0 → 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/index.js +79 -36
- package/dist/index.js.map +1 -1
- package/dist/openapi-parser.d.ts +8 -1
- package/dist/openapi-parser.js +30 -6
- package/dist/openapi-parser.js.map +1 -1
- package/package.json +6 -1
package/dist/index.js
CHANGED
|
@@ -3,8 +3,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { parseOpenApiSpec } from "./openapi-parser.js";
|
|
6
|
-
const OPENAPI_SPEC_URL = process.env.RIVETER_OPENAPI_URL ||
|
|
7
|
-
"https://docs.riveterhq.com/openapi.yaml";
|
|
6
|
+
const OPENAPI_SPEC_URL = process.env.RIVETER_OPENAPI_URL || "https://docs.riveterhq.com/openapi.yaml";
|
|
8
7
|
const API_BASE_URL = process.env.RIVETER_API_BASE_URL || "https://api.riveterhq.com/v1";
|
|
9
8
|
const API_KEY = process.env.RIVETER_API_KEY || "";
|
|
10
9
|
async function fetchSpec() {
|
|
@@ -52,11 +51,23 @@ async function callApi(method, path, queryParams, body) {
|
|
|
52
51
|
}
|
|
53
52
|
// Workflow hints appended to tool descriptions so Claude knows the async patterns
|
|
54
53
|
const WORKFLOW_HINTS = {
|
|
54
|
+
// Enrichment runs
|
|
55
55
|
runNewEnrichment: "\n\n**Workflow:** This starts an async run. Use the returned `run_key` with `get_run_status` to poll until status is 'success', then `get_run_data` to retrieve results.",
|
|
56
56
|
runExistingEnrichment: "\n\n**Workflow:** This starts an async run. Use the returned `run_key` with `get_run_status` to poll until status is 'success', then `get_run_data` to retrieve results.",
|
|
57
57
|
getRunStatus: "\n\n**Workflow:** Poll this endpoint until `status` is 'success' or 'stopped'. Typical runs take 10-120 seconds. Poll every 5-10 seconds.",
|
|
58
58
|
getRunData: "\n\n**Workflow:** Call this after `get_run_status` shows 'success' to get the full results.",
|
|
59
|
+
stopRun: "\n\n**Workflow:** Stops a running enrichment. The run cannot be resumed after stopping.",
|
|
60
|
+
// Monitors
|
|
59
61
|
monitorEnrichment: "\n\n**Workflow:** Creates a scheduled monitor. Use the returned `monitor_uuid` with `get_monitor_status` to check on it, or `pause_monitor` to pause it.",
|
|
62
|
+
getMonitorStatus: "\n\n**Workflow:** Returns the monitor's schedule, enabled state, and next run time.",
|
|
63
|
+
getMonitorRecentRunData: "\n\n**Workflow:** Returns the results from the monitor's most recent run.",
|
|
64
|
+
// Dataset builder
|
|
65
|
+
buildDataset: "\n\n**Workflow:** This starts an async dataset build. Use the returned `run_key` with `get_build_dataset_status` to poll until state is 'completed', then `get_build_dataset_data` to retrieve rows. To enrich the dataset, call `create_enrichment_from_dataset` then `run_enrichment_from_dataset`.",
|
|
66
|
+
getBuildDatasetStatus: "\n\n**Workflow:** Poll this endpoint until `state` is 'completed' or 'failed'. Then use `get_build_dataset_data` to get the generated rows.",
|
|
67
|
+
getBuildDatasetData: "\n\n**Workflow:** Call this after `get_build_dataset_status` shows state 'completed' to get the generated rows.",
|
|
68
|
+
stopBuildDataset: "\n\n**Workflow:** Stops a dataset build in progress.",
|
|
69
|
+
createEnrichmentFromDataset: "\n\n**Workflow:** Creates an enrichment from a completed dataset build. Then use `run_enrichment_from_dataset` with the same `run_key` to execute it.",
|
|
70
|
+
runEnrichmentFromDataset: "\n\n**Workflow:** Starts an async enrichment run using the dataset as input. Use the returned `run_key` with `get_run_status` to poll until status is 'success', then `get_run_data` to retrieve results.",
|
|
60
71
|
};
|
|
61
72
|
function operationIdToToolName(operationId) {
|
|
62
73
|
return operationId
|
|
@@ -68,15 +79,25 @@ function buildZodShape(params, bodyProps) {
|
|
|
68
79
|
const shape = {};
|
|
69
80
|
for (const param of params) {
|
|
70
81
|
let fieldSchema;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
if (param.schema.enum && param.schema.enum.length > 0) {
|
|
83
|
+
fieldSchema = z
|
|
84
|
+
.enum(param.schema.enum)
|
|
85
|
+
.describe(param.description || param.name);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
switch (param.schema.type) {
|
|
89
|
+
case "integer":
|
|
90
|
+
fieldSchema = z
|
|
91
|
+
.number()
|
|
92
|
+
.int()
|
|
93
|
+
.describe(param.description || param.name);
|
|
94
|
+
break;
|
|
95
|
+
case "boolean":
|
|
96
|
+
fieldSchema = z.boolean().describe(param.description || param.name);
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
fieldSchema = z.string().describe(param.description || param.name);
|
|
100
|
+
}
|
|
80
101
|
}
|
|
81
102
|
if (!param.required) {
|
|
82
103
|
fieldSchema = fieldSchema.optional();
|
|
@@ -87,26 +108,45 @@ function buildZodShape(params, bodyProps) {
|
|
|
87
108
|
if (shape[name])
|
|
88
109
|
continue;
|
|
89
110
|
let fieldSchema;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
if (prop.enum && prop.enum.length > 0) {
|
|
112
|
+
fieldSchema = z
|
|
113
|
+
.enum(prop.enum)
|
|
114
|
+
.describe(prop.description || name);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
switch (prop.type) {
|
|
118
|
+
case "integer":
|
|
119
|
+
fieldSchema = z
|
|
120
|
+
.number()
|
|
121
|
+
.int()
|
|
122
|
+
.describe(prop.description || name);
|
|
123
|
+
break;
|
|
124
|
+
case "number":
|
|
125
|
+
fieldSchema = z.number().describe(prop.description || name);
|
|
126
|
+
break;
|
|
127
|
+
case "boolean":
|
|
128
|
+
fieldSchema = z.boolean().describe(prop.description || name);
|
|
129
|
+
break;
|
|
130
|
+
case "array": {
|
|
131
|
+
const itemType = prop.items?.type;
|
|
132
|
+
const inner = itemType === "string"
|
|
133
|
+
? z.string()
|
|
134
|
+
: itemType === "integer"
|
|
135
|
+
? z.number().int()
|
|
136
|
+
: itemType === "number"
|
|
137
|
+
? z.number()
|
|
138
|
+
: z.any();
|
|
139
|
+
fieldSchema = z.array(inner).describe(prop.description || name);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case "object":
|
|
143
|
+
fieldSchema = z
|
|
144
|
+
.record(z.string(), z.any())
|
|
145
|
+
.describe(prop.description || name);
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
fieldSchema = z.string().describe(prop.description || name);
|
|
149
|
+
}
|
|
110
150
|
}
|
|
111
151
|
if (!prop.required) {
|
|
112
152
|
fieldSchema = fieldSchema.optional();
|
|
@@ -120,10 +160,6 @@ async function main() {
|
|
|
120
160
|
console.error("RIVETER_API_KEY environment variable is required. Get one at https://app.riveterhq.com/settings/api");
|
|
121
161
|
process.exit(1);
|
|
122
162
|
}
|
|
123
|
-
const server = new McpServer({
|
|
124
|
-
name: "riveter",
|
|
125
|
-
version: "0.1.0",
|
|
126
|
-
});
|
|
127
163
|
let specText;
|
|
128
164
|
try {
|
|
129
165
|
specText = await fetchSpec();
|
|
@@ -132,7 +168,14 @@ async function main() {
|
|
|
132
168
|
console.error(`Failed to fetch OpenAPI spec: ${err}`);
|
|
133
169
|
process.exit(1);
|
|
134
170
|
}
|
|
135
|
-
const operations = parseOpenApiSpec(specText);
|
|
171
|
+
const { operations, apiOverview } = parseOpenApiSpec(specText);
|
|
172
|
+
const server = new McpServer({
|
|
173
|
+
name: "riveter",
|
|
174
|
+
version: "1.0.1",
|
|
175
|
+
}, {
|
|
176
|
+
instructions: apiOverview +
|
|
177
|
+
"\n\nNote: Authentication is handled automatically by this MCP server. You do not need to manage API keys or headers.",
|
|
178
|
+
});
|
|
136
179
|
for (const op of operations) {
|
|
137
180
|
const toolName = operationIdToToolName(op.operationId);
|
|
138
181
|
const hint = WORKFLOW_HINTS[op.operationId] || "";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAA;AAE7E,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,yCAAyC,CAAA;AAE9E,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,8BAA8B,CAAA;AAEpE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAA;AAEjD,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACzC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,qCAAqC,gBAAgB,KAAK,GAAG,CAAC,MAAM,EAAE,CACvE,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,WAAoC,EACpC,IAA8B;IAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC,CAAA;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,OAAO,EAAE;QAClC,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,kBAAkB;KAC3B,CAAA;IAED,MAAM,YAAY,GAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAA;IAC3E,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;QAC1E,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAA;IACrD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAE7B,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,GAAG,CAAC,MAAM;YACvB,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAC1E,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,cAAc,GAA2B;IAC7C,kBAAkB;IAClB,gBAAgB,EACd,0KAA0K;IAC5K,qBAAqB,EACnB,0KAA0K;IAC5K,YAAY,EACV,2IAA2I;IAC7I,UAAU,EACR,6FAA6F;IAC/F,OAAO,EACL,yFAAyF;IAC3F,WAAW;IACX,iBAAiB,EACf,0JAA0J;IAC5J,gBAAgB,EACd,qFAAqF;IACvF,uBAAuB,EACrB,2EAA2E;IAC7E,kBAAkB;IAClB,YAAY,EACV,uSAAuS;IACzS,qBAAqB,EACnB,6IAA6I;IAC/I,mBAAmB,EACjB,iHAAiH;IACnH,gBAAgB,EAAE,sDAAsD;IACxE,2BAA2B,EACzB,uJAAuJ;IACzJ,wBAAwB,EACtB,2MAA2M;CAC9M,CAAA;AAED,SAAS,qBAAqB,CAAC,WAAmB;IAChD,OAAO,WAAW;SACf,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,WAAW,EAAE,CAAA;AAClB,CAAC;AAED,SAAS,aAAa,CACpB,MAAsC,EACtC,SAAoD;IAEpD,MAAM,KAAK,GAAiC,EAAE,CAAA;IAE9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,WAAyB,CAAA;QAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,WAAW,GAAG,CAAC;iBACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAA6B,CAAC;iBAChD,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,QAAQ,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1B,KAAK,SAAS;oBACZ,WAAW,GAAG,CAAC;yBACZ,MAAM,EAAE;yBACR,GAAG,EAAE;yBACL,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC5C,MAAK;gBACP,KAAK,SAAS;oBACZ,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;oBACnE,MAAK;gBACP;oBACE,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;QACtC,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAA;IACjC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,IAAI,CAAC;YAAE,SAAQ;QACzB,IAAI,WAAyB,CAAA;QAC7B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,WAAW,GAAG,CAAC;iBACZ,IAAI,CAAC,IAAI,CAAC,IAA6B,CAAC;iBACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,SAAS;oBACZ,WAAW,GAAG,CAAC;yBACZ,MAAM,EAAE;yBACR,GAAG,EAAE;yBACL,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;oBACrC,MAAK;gBACP,KAAK,QAAQ;oBACX,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;oBAC3D,MAAK;gBACP,KAAK,SAAS;oBACZ,WAAW,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;oBAC5D,MAAK;gBACP,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAA;oBACjC,MAAM,KAAK,GACT,QAAQ,KAAK,QAAQ;wBACnB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;wBACZ,CAAC,CAAC,QAAQ,KAAK,SAAS;4BACtB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;4BAClB,CAAC,CAAC,QAAQ,KAAK,QAAQ;gCACrB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;gCACZ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;oBACjB,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;oBAC/D,MAAK;gBACP,CAAC;gBACD,KAAK,QAAQ;oBACX,WAAW,GAAG,CAAC;yBACZ,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;yBAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;oBACrC,MAAK;gBACP;oBACE,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAA;YAC/D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAA;QACtC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAA;IAC3B,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,qGAAqG,CACtG,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAA;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAE9D,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EACV,WAAW;YACX,sHAAsH;KACzH,CACF,CAAA;IAED,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QACjD,MAAM,WAAW,GACf,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,GAAG,IAAI,CAAA;QAEjE,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAA;QAEpE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACjE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAA;QACxB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAA;QAEpB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACvD,MAAM,WAAW,GAA2B,EAAE,CAAA;YAC9C,MAAM,UAAU,GAA4B,EAAE,CAAA;YAE9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAQ;gBACjC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClC,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACzB,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,MAAM,EACN,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAC7D,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAA;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;iBACF,CAAA;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;yBAChF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/openapi-parser.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ export interface OpenApiBodyProperty {
|
|
|
13
13
|
description: string;
|
|
14
14
|
required: boolean;
|
|
15
15
|
enum?: string[];
|
|
16
|
+
items?: {
|
|
17
|
+
type: string;
|
|
18
|
+
};
|
|
16
19
|
}
|
|
17
20
|
export interface OpenApiOperation {
|
|
18
21
|
operationId: string;
|
|
@@ -23,4 +26,8 @@ export interface OpenApiOperation {
|
|
|
23
26
|
parameters: OpenApiParameter[];
|
|
24
27
|
requestBodyProperties: Record<string, OpenApiBodyProperty>;
|
|
25
28
|
}
|
|
26
|
-
export
|
|
29
|
+
export interface ParseResult {
|
|
30
|
+
operations: OpenApiOperation[];
|
|
31
|
+
apiOverview: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function parseOpenApiSpec(specText: string): ParseResult;
|
package/dist/openapi-parser.js
CHANGED
|
@@ -2,9 +2,7 @@ import { parse as parseYaml } from "yaml";
|
|
|
2
2
|
function cleanDescription(desc) {
|
|
3
3
|
if (!desc)
|
|
4
4
|
return "";
|
|
5
|
-
// Strip markdown code blocks and excessive whitespace for cleaner tool descriptions
|
|
6
5
|
return desc
|
|
7
|
-
.replace(/```[\s\S]*?```/g, "")
|
|
8
6
|
.replace(/\n{3,}/g, "\n\n")
|
|
9
7
|
.trim();
|
|
10
8
|
}
|
|
@@ -25,11 +23,26 @@ function extractRequiredFields(schema) {
|
|
|
25
23
|
}
|
|
26
24
|
return [];
|
|
27
25
|
}
|
|
26
|
+
function formatExamples(examples) {
|
|
27
|
+
if (!examples)
|
|
28
|
+
return "";
|
|
29
|
+
let text = "";
|
|
30
|
+
for (const [, example] of Object.entries(examples)) {
|
|
31
|
+
const summary = example.summary || "";
|
|
32
|
+
const value = example.value;
|
|
33
|
+
if (value) {
|
|
34
|
+
text += `\n\n**Example${summary ? ` — ${summary}` : ""}:**\n${JSON.stringify(value, null, 2)}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return text;
|
|
38
|
+
}
|
|
28
39
|
export function parseOpenApiSpec(specText) {
|
|
29
40
|
const spec = parseYaml(specText);
|
|
41
|
+
const info = spec.info;
|
|
42
|
+
const apiOverview = cleanDescription(info?.description);
|
|
30
43
|
const paths = spec.paths;
|
|
31
44
|
if (!paths)
|
|
32
|
-
return [];
|
|
45
|
+
return { operations: [], apiOverview };
|
|
33
46
|
const operations = [];
|
|
34
47
|
const httpMethods = ["get", "post", "put", "patch", "delete"];
|
|
35
48
|
for (const [path, pathItem] of Object.entries(paths)) {
|
|
@@ -58,8 +71,9 @@ export function parseOpenApiSpec(specText) {
|
|
|
58
71
|
},
|
|
59
72
|
};
|
|
60
73
|
});
|
|
61
|
-
// Parse request body properties
|
|
74
|
+
// Parse request body properties and examples
|
|
62
75
|
const requestBodyProperties = {};
|
|
76
|
+
let examplesText = "";
|
|
63
77
|
const requestBody = operation.requestBody;
|
|
64
78
|
if (requestBody) {
|
|
65
79
|
const content = requestBody.content;
|
|
@@ -77,14 +91,24 @@ export function parseOpenApiSpec(specText) {
|
|
|
77
91
|
if ("$ref" in resolved) {
|
|
78
92
|
resolved = resolveRef(spec, resolved.$ref) || resolved;
|
|
79
93
|
}
|
|
94
|
+
let itemsInfo;
|
|
95
|
+
if (resolved.type === "array" && resolved.items) {
|
|
96
|
+
const items = resolved.items;
|
|
97
|
+
if (items.type) {
|
|
98
|
+
itemsInfo = { type: items.type };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
80
101
|
requestBodyProperties[propName] = {
|
|
81
102
|
type: resolved.type || "object",
|
|
82
103
|
description: cleanDescription(resolved.description),
|
|
83
104
|
required: requiredFields.includes(propName),
|
|
84
105
|
enum: resolved.enum,
|
|
106
|
+
items: itemsInfo,
|
|
85
107
|
};
|
|
86
108
|
}
|
|
87
109
|
}
|
|
110
|
+
const examples = jsonContent.examples;
|
|
111
|
+
examplesText = formatExamples(examples);
|
|
88
112
|
}
|
|
89
113
|
}
|
|
90
114
|
operations.push({
|
|
@@ -92,12 +116,12 @@ export function parseOpenApiSpec(specText) {
|
|
|
92
116
|
method,
|
|
93
117
|
path,
|
|
94
118
|
summary: operation.summary || "",
|
|
95
|
-
description: cleanDescription(operation.description),
|
|
119
|
+
description: cleanDescription(operation.description) + examplesText,
|
|
96
120
|
parameters,
|
|
97
121
|
requestBodyProperties,
|
|
98
122
|
});
|
|
99
123
|
}
|
|
100
124
|
}
|
|
101
|
-
return operations;
|
|
125
|
+
return { operations, apiOverview };
|
|
102
126
|
}
|
|
103
127
|
//# sourceMappingURL=openapi-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-parser.js","sourceRoot":"","sources":["../src/openapi-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi-parser.js","sourceRoot":"","sources":["../src/openapi-parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "riveter-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"mcpName": "io.github.CodyWatters/riveter",
|
|
4
5
|
"description": "MCP server for the Riveter API — connects Claude to Riveter's enrichment, scraping, and monitoring tools",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/CodyWatters/riveter-mcp-server.git"
|
|
9
|
+
},
|
|
5
10
|
"type": "module",
|
|
6
11
|
"main": "dist/index.js",
|
|
7
12
|
"bin": {
|