@vleap/warps-mcp 1.0.0-beta.6 → 1.0.0-beta.7

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.d.cts CHANGED
@@ -8,7 +8,6 @@ declare const convertMcpToolToWarp: (config: WarpClientConfig, tool: {
8
8
  }, url: string, headers?: Record<string, string>) => Promise<Warp>;
9
9
  declare const convertWarpToMcpCapabilities: (warp: Warp) => {
10
10
  tools: any[];
11
- resources: any[];
12
11
  };
13
12
 
14
13
  declare class WarpMcp {
package/dist/index.d.ts CHANGED
@@ -8,7 +8,6 @@ declare const convertMcpToolToWarp: (config: WarpClientConfig, tool: {
8
8
  }, url: string, headers?: Record<string, string>) => Promise<Warp>;
9
9
  declare const convertWarpToMcpCapabilities: (warp: Warp) => {
10
10
  tools: any[];
11
- resources: any[];
12
11
  };
13
12
 
14
13
  declare class WarpMcp {
package/dist/index.js CHANGED
@@ -67,7 +67,6 @@ var convertMcpToolToWarp = async (config, tool, url, headers) => {
67
67
  };
68
68
  var convertWarpToMcpCapabilities = (warp) => {
69
69
  const tools = [];
70
- const resources = [];
71
70
  const description = warp.description && typeof warp.description === "object" && "en" in warp.description ? warp.description.en : void 0;
72
71
  const outputSchema = {
73
72
  type: "object",
@@ -85,86 +84,65 @@ var convertWarpToMcpCapabilities = (warp) => {
85
84
  warp.actions.forEach((action, index) => {
86
85
  const actionDescription = action.description && typeof action.description === "object" && "en" in action.description ? action.description.en : void 0;
87
86
  const finalDescription = description || actionDescription || void 0;
88
- if (action.type === "transfer" || action.type === "contract") {
89
- const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index);
87
+ let isReadonly = false;
88
+ if (action.type === "query") {
89
+ isReadonly = true;
90
+ const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index, isReadonly);
90
91
  tools.push(tool);
91
- } else if (action.type === "query") {
92
- const resource = convertActionToResource(warp, action, finalDescription, index);
93
- resources.push(resource);
94
92
  } else if (action.type === "collect") {
95
93
  const collectAction = action;
96
- if (collectAction.destination && typeof collectAction.destination === "object" && "method" in collectAction.destination && (collectAction.destination.method === "POST" || collectAction.destination.method === "PUT" || collectAction.destination.method === "DELETE")) {
97
- const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index);
98
- tools.push(tool);
99
- } else {
100
- const resource = convertActionToResource(warp, action, finalDescription, index);
101
- resources.push(resource);
102
- }
94
+ const method = collectAction.destination && typeof collectAction.destination === "object" && "method" in collectAction.destination ? collectAction.destination.method : "GET";
95
+ isReadonly = method === "GET";
96
+ const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index, isReadonly);
97
+ tools.push(tool);
98
+ } else if (action.type === "transfer" || action.type === "contract") {
99
+ const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index, isReadonly);
100
+ tools.push(tool);
103
101
  } else if (action.type === "mcp") {
104
102
  const mcpAction = action;
105
103
  if (mcpAction.destination) {
106
- const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : void 0);
104
+ const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : void 0, isReadonly);
107
105
  tools.push(tool);
108
106
  }
109
107
  }
110
108
  });
111
- return { tools, resources };
109
+ return { tools };
112
110
  };
113
111
  var sanitizeMcpName = (name) => {
114
112
  return name.replace(/\s+/g, "_").replace(/:/g, "_").replace(/[^A-Za-z0-9_.-]/g, "_").replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, "").replace(/_+/g, "_");
115
113
  };
116
- var convertActionToTool = (warp, action, description, outputSchema, index) => {
114
+ var convertActionToTool = (warp, action, description, outputSchema, index, readonly = false) => {
117
115
  const inputSchema = buildInputSchema(action.inputs || []);
118
116
  const name = sanitizeMcpName(`${warp.name}_${index}`);
119
117
  let url;
120
118
  let headers;
121
119
  if (action.type === "collect") {
122
- const collectAction = action;
123
- if (collectAction.destination && typeof collectAction.destination === "object" && "url" in collectAction.destination) {
124
- url = collectAction.destination.url;
125
- headers = collectAction.destination.headers;
126
- }
127
- }
128
- return {
129
- name,
130
- description,
131
- inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : void 0,
132
- outputSchema,
133
- url,
134
- headers
135
- };
136
- };
137
- var convertActionToResource = (warp, action, description, index) => {
138
- const name = sanitizeMcpName(`${warp.name}_${index}`);
139
- let uri;
140
- let mimeType;
141
- let headers;
142
- if (action.type === "query") {
143
- const queryAction = action;
144
- if (queryAction.address) {
145
- uri = queryAction.address;
146
- }
147
- } else if (action.type === "collect") {
148
120
  const collectAction = action;
149
121
  if (collectAction.destination) {
150
122
  if (typeof collectAction.destination === "string") {
151
- uri = collectAction.destination;
123
+ url = collectAction.destination;
152
124
  } else if (typeof collectAction.destination === "object" && "url" in collectAction.destination) {
153
- uri = collectAction.destination.url;
125
+ url = collectAction.destination.url;
154
126
  headers = collectAction.destination.headers;
155
- mimeType = "application/json";
156
127
  }
157
128
  }
129
+ } else if (action.type === "query") {
130
+ const queryAction = action;
131
+ if (queryAction.address) {
132
+ url = queryAction.address;
133
+ }
158
134
  }
159
135
  return {
160
- uri: uri || name,
161
136
  name,
162
137
  description,
163
- mimeType,
164
- headers
138
+ inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : void 0,
139
+ outputSchema,
140
+ url,
141
+ headers,
142
+ readonly
165
143
  };
166
144
  };
167
- var convertMcpActionToTool = (warp, action, description, outputSchema) => {
145
+ var convertMcpActionToTool = (warp, action, description, outputSchema, readonly = false) => {
168
146
  const inputSchema = buildInputSchema(action.inputs || []);
169
147
  const { url, tool: toolName, headers } = action.destination;
170
148
  return {
@@ -173,7 +151,8 @@ var convertMcpActionToTool = (warp, action, description, outputSchema) => {
173
151
  inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : void 0,
174
152
  outputSchema,
175
153
  url,
176
- headers
154
+ headers,
155
+ readonly
177
156
  };
178
157
  };
179
158
  var buildInputSchema = (inputs) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/helpers/warps.ts","../src/WarpMcp.ts"],"sourcesContent":["export * from './helpers'\nexport * from './WarpMcp'\n","import {\n Warp,\n WarpActionInput,\n WarpActionInputType,\n WarpBuilder,\n WarpClientConfig,\n WarpCollectAction,\n WarpContractAction,\n WarpMcpAction,\n WarpQueryAction,\n WarpTransferAction,\n} from '@vleap/warps'\n\nexport const convertMcpToolToWarp = async (\n config: WarpClientConfig,\n tool: { name: string; description?: string; inputSchema?: any; outputSchema?: any },\n url: string,\n headers?: Record<string, string>\n): Promise<Warp> => {\n const inputs: WarpActionInput[] = []\n\n if (tool.inputSchema && tool.inputSchema.properties) {\n const properties = tool.inputSchema.properties\n const required = tool.inputSchema.required || []\n\n Object.entries(properties).forEach(([key, value]: [string, any]) => {\n const isRequired = required.includes(key)\n const inputType = convertJsonSchemaTypeToWarpType(value.type, value.format)\n\n const inputDef: WarpActionInput = {\n name: key,\n label: value.title || { en: key },\n description: value.description ? { en: value.description.trim() } : null,\n type: inputType,\n position: `payload:${key}`,\n source: 'field',\n required: isRequired,\n default: value.default,\n }\n\n inputs.push(inputDef)\n })\n }\n\n const output: Record<string, string> = {}\n if (tool.outputSchema && tool.outputSchema.properties) {\n const properties = tool.outputSchema.properties\n Object.keys(properties).forEach((key) => {\n output[key] = `out.${key}`\n })\n }\n\n const mcpAction: WarpMcpAction = {\n type: 'mcp',\n label: { en: tool.name },\n description: tool.description ? { en: tool.description.trim() } : null,\n destination: { url, tool: tool.name, headers },\n inputs,\n }\n\n return await new WarpBuilder(config)\n .setName(tool.name)\n .setTitle({ en: tool.name })\n .setDescription(tool.description ? { en: tool.description.trim() } : null)\n .addAction(mcpAction)\n .setOutput(Object.keys(output).length > 0 ? output : null)\n .build(false)\n}\n\nexport const convertWarpToMcpCapabilities = (warp: Warp): { tools: any[]; resources: any[] } => {\n const tools: any[] = []\n const resources: any[] = []\n\n const description = warp.description && typeof warp.description === 'object' && 'en' in warp.description ? warp.description.en : undefined\n\n const outputSchema: any = {\n type: 'object',\n properties: {},\n }\n\n if (warp.output && Object.keys(warp.output).length > 0) {\n Object.keys(warp.output).forEach((key) => {\n outputSchema.properties[key] = {\n type: 'string',\n description: `Output field ${key}`,\n }\n })\n }\n\n const hasOutput = Object.keys(outputSchema.properties).length > 0\n\n warp.actions.forEach((action, index) => {\n const actionDescription =\n action.description && typeof action.description === 'object' && 'en' in action.description ? action.description.en : undefined\n\n const finalDescription = description || actionDescription || undefined\n\n if (action.type === 'transfer' || action.type === 'contract') {\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index)\n tools.push(tool)\n } else if (action.type === 'query') {\n const resource = convertActionToResource(warp, action, finalDescription, index)\n resources.push(resource)\n } else if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (\n collectAction.destination &&\n typeof collectAction.destination === 'object' &&\n 'method' in collectAction.destination &&\n (collectAction.destination.method === 'POST' ||\n collectAction.destination.method === 'PUT' ||\n collectAction.destination.method === 'DELETE')\n ) {\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index)\n tools.push(tool)\n } else {\n const resource = convertActionToResource(warp, action, finalDescription, index)\n resources.push(resource)\n }\n } else if (action.type === 'mcp') {\n const mcpAction = action as WarpMcpAction\n if (mcpAction.destination) {\n const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : undefined)\n tools.push(tool)\n }\n }\n })\n\n return { tools, resources }\n}\n\nconst sanitizeMcpName = (name: string): string => {\n return name\n .replace(/\\s+/g, '_')\n .replace(/:/g, '_')\n .replace(/[^A-Za-z0-9_.-]/g, '_')\n .replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, '')\n .replace(/_+/g, '_')\n}\n\nconst convertActionToTool = (\n warp: Warp,\n action: WarpTransferAction | WarpContractAction | WarpCollectAction,\n description: string | undefined,\n outputSchema: any | undefined,\n index: number\n): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const name = sanitizeMcpName(`${warp.name}_${index}`)\n\n let url: string | undefined\n let headers: Record<string, string> | undefined\n\n if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (collectAction.destination && typeof collectAction.destination === 'object' && 'url' in collectAction.destination) {\n url = collectAction.destination.url\n headers = collectAction.destination.headers\n }\n }\n\n return {\n name,\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n }\n}\n\nconst convertActionToResource = (\n warp: Warp,\n action: WarpQueryAction | WarpCollectAction,\n description: string | undefined,\n index: number\n): any => {\n const name = sanitizeMcpName(`${warp.name}_${index}`)\n let uri: string | undefined\n let mimeType: string | undefined\n let headers: Record<string, string> | undefined\n\n if (action.type === 'query') {\n const queryAction = action as WarpQueryAction\n if (queryAction.address) {\n uri = queryAction.address\n }\n } else if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (collectAction.destination) {\n if (typeof collectAction.destination === 'string') {\n uri = collectAction.destination\n } else if (typeof collectAction.destination === 'object' && 'url' in collectAction.destination) {\n uri = collectAction.destination.url\n headers = collectAction.destination.headers\n mimeType = 'application/json'\n }\n }\n }\n\n return {\n uri: uri || name,\n name,\n description,\n mimeType,\n headers,\n }\n}\n\nconst convertMcpActionToTool = (warp: Warp, action: WarpMcpAction, description: string | undefined, outputSchema: any | undefined): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const { url, tool: toolName, headers } = action.destination!\n\n return {\n name: sanitizeMcpName(toolName),\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n }\n}\n\nconst buildInputSchema = (inputs: WarpActionInput[]): any => {\n const inputSchema: any = {\n type: 'object',\n properties: {},\n required: [],\n }\n\n inputs.forEach((input) => {\n if (input.position && typeof input.position === 'string' && input.position.startsWith('payload:')) {\n const key = input.position.replace('payload:', '')\n const jsonSchemaType = convertWarpTypeToJsonSchemaType(input.type)\n\n const property: any = {\n type: jsonSchemaType.type,\n }\n\n if (jsonSchemaType.format) {\n property.format = jsonSchemaType.format\n }\n\n if (input.label && typeof input.label === 'object' && 'en' in input.label) {\n property.title = input.label.en\n }\n\n if (input.description && typeof input.description === 'object' && 'en' in input.description) {\n property.description = input.description.en\n }\n\n if (input.default !== undefined) {\n property.default = input.default\n }\n\n inputSchema.properties[key] = property\n\n if (input.required) {\n inputSchema.required.push(key)\n }\n }\n })\n\n return inputSchema\n}\n\nconst convertJsonSchemaTypeToWarpType = (type: string, format?: string): WarpActionInputType => {\n if (format === 'date-time' || format === 'date') return 'string'\n if (type === 'string') return 'string'\n if (type === 'number') return 'uint256'\n if (type === 'integer') return 'uint256'\n if (type === 'boolean') return 'bool'\n if (type === 'array') return 'string'\n if (type === 'object') return 'string'\n return 'string'\n}\n\nconst convertWarpTypeToJsonSchemaType = (warpType: string): { type: string; format?: string } => {\n if (warpType === 'string') return { type: 'string' }\n if (warpType === 'bool') return { type: 'boolean' }\n if (\n warpType === 'uint8' ||\n warpType === 'uint16' ||\n warpType === 'uint32' ||\n warpType === 'uint64' ||\n warpType === 'uint128' ||\n warpType === 'uint256' ||\n warpType === 'biguint'\n ) {\n return { type: 'integer' }\n }\n if (warpType === 'number') return { type: 'number' }\n return { type: 'string' }\n}\n","import { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { Warp, WarpClientConfig } from '@vleap/warps'\nimport { convertMcpToolToWarp } from './helpers/warps'\n\nexport class WarpMcp {\n constructor(private readonly config: WarpClientConfig) {}\n\n async getWarpsFromTools(url: string, headers?: Record<string, string>): Promise<Warp[]> {\n const transport = new StreamableHTTPClientTransport(new URL(url), {\n requestInit: { headers: headers || {} },\n })\n\n const client = new Client({ name: 'warps-mcp-client', version: '1.0.0' }, { capabilities: {} })\n\n try {\n await client.connect(transport)\n\n const tools = await client.listTools()\n\n await client.close()\n\n return await Promise.all(tools.tools.map((tool) => convertMcpToolToWarp(this.config, tool, url, headers)))\n } catch (error) {\n await client.close().catch(() => {})\n throw error\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/helpers/warps.ts","../src/WarpMcp.ts"],"sourcesContent":["export * from './helpers'\nexport * from './WarpMcp'\n","import {\n Warp,\n WarpActionInput,\n WarpActionInputType,\n WarpBuilder,\n WarpClientConfig,\n WarpCollectAction,\n WarpContractAction,\n WarpMcpAction,\n WarpQueryAction,\n WarpTransferAction,\n} from '@vleap/warps'\n\nexport const convertMcpToolToWarp = async (\n config: WarpClientConfig,\n tool: { name: string; description?: string; inputSchema?: any; outputSchema?: any },\n url: string,\n headers?: Record<string, string>\n): Promise<Warp> => {\n const inputs: WarpActionInput[] = []\n\n if (tool.inputSchema && tool.inputSchema.properties) {\n const properties = tool.inputSchema.properties\n const required = tool.inputSchema.required || []\n\n Object.entries(properties).forEach(([key, value]: [string, any]) => {\n const isRequired = required.includes(key)\n const inputType = convertJsonSchemaTypeToWarpType(value.type, value.format)\n\n const inputDef: WarpActionInput = {\n name: key,\n label: value.title || { en: key },\n description: value.description ? { en: value.description.trim() } : null,\n type: inputType,\n position: `payload:${key}`,\n source: 'field',\n required: isRequired,\n default: value.default,\n }\n\n inputs.push(inputDef)\n })\n }\n\n const output: Record<string, string> = {}\n if (tool.outputSchema && tool.outputSchema.properties) {\n const properties = tool.outputSchema.properties\n Object.keys(properties).forEach((key) => {\n output[key] = `out.${key}`\n })\n }\n\n const mcpAction: WarpMcpAction = {\n type: 'mcp',\n label: { en: tool.name },\n description: tool.description ? { en: tool.description.trim() } : null,\n destination: { url, tool: tool.name, headers },\n inputs,\n }\n\n return await new WarpBuilder(config)\n .setName(tool.name)\n .setTitle({ en: tool.name })\n .setDescription(tool.description ? { en: tool.description.trim() } : null)\n .addAction(mcpAction)\n .setOutput(Object.keys(output).length > 0 ? output : null)\n .build(false)\n}\n\nexport const convertWarpToMcpCapabilities = (warp: Warp): { tools: any[] } => {\n const tools: any[] = []\n\n const description = warp.description && typeof warp.description === 'object' && 'en' in warp.description ? warp.description.en : undefined\n\n const outputSchema: any = {\n type: 'object',\n properties: {},\n }\n\n if (warp.output && Object.keys(warp.output).length > 0) {\n Object.keys(warp.output).forEach((key) => {\n outputSchema.properties[key] = {\n type: 'string',\n description: `Output field ${key}`,\n }\n })\n }\n\n const hasOutput = Object.keys(outputSchema.properties).length > 0\n\n warp.actions.forEach((action, index) => {\n const actionDescription =\n action.description && typeof action.description === 'object' && 'en' in action.description ? action.description.en : undefined\n\n const finalDescription = description || actionDescription || undefined\n\n let isReadonly = false\n\n if (action.type === 'query') {\n isReadonly = true\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index, isReadonly)\n tools.push(tool)\n } else if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n const method = collectAction.destination && typeof collectAction.destination === 'object' && 'method' in collectAction.destination\n ? collectAction.destination.method\n : 'GET'\n isReadonly = method === 'GET'\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index, isReadonly)\n tools.push(tool)\n } else if (action.type === 'transfer' || action.type === 'contract') {\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index, isReadonly)\n tools.push(tool)\n } else if (action.type === 'mcp') {\n const mcpAction = action as WarpMcpAction\n if (mcpAction.destination) {\n const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : undefined, isReadonly)\n tools.push(tool)\n }\n }\n })\n\n return { tools }\n}\n\nconst sanitizeMcpName = (name: string): string => {\n return name\n .replace(/\\s+/g, '_')\n .replace(/:/g, '_')\n .replace(/[^A-Za-z0-9_.-]/g, '_')\n .replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, '')\n .replace(/_+/g, '_')\n}\n\nconst convertActionToTool = (\n warp: Warp,\n action: WarpTransferAction | WarpContractAction | WarpCollectAction | WarpQueryAction,\n description: string | undefined,\n outputSchema: any | undefined,\n index: number,\n readonly: boolean = false\n): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const name = sanitizeMcpName(`${warp.name}_${index}`)\n\n let url: string | undefined\n let headers: Record<string, string> | undefined\n\n if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (collectAction.destination) {\n if (typeof collectAction.destination === 'string') {\n url = collectAction.destination\n } else if (typeof collectAction.destination === 'object' && 'url' in collectAction.destination) {\n url = collectAction.destination.url\n headers = collectAction.destination.headers\n }\n }\n } else if (action.type === 'query') {\n const queryAction = action as WarpQueryAction\n if (queryAction.address) {\n url = queryAction.address\n }\n }\n\n return {\n name,\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n readonly,\n }\n}\n\nconst convertMcpActionToTool = (warp: Warp, action: WarpMcpAction, description: string | undefined, outputSchema: any | undefined, readonly: boolean = false): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const { url, tool: toolName, headers } = action.destination!\n\n return {\n name: sanitizeMcpName(toolName),\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n readonly,\n }\n}\n\nconst buildInputSchema = (inputs: WarpActionInput[]): any => {\n const inputSchema: any = {\n type: 'object',\n properties: {},\n required: [],\n }\n\n inputs.forEach((input) => {\n if (input.position && typeof input.position === 'string' && input.position.startsWith('payload:')) {\n const key = input.position.replace('payload:', '')\n const jsonSchemaType = convertWarpTypeToJsonSchemaType(input.type)\n\n const property: any = {\n type: jsonSchemaType.type,\n }\n\n if (jsonSchemaType.format) {\n property.format = jsonSchemaType.format\n }\n\n if (input.label && typeof input.label === 'object' && 'en' in input.label) {\n property.title = input.label.en\n }\n\n if (input.description && typeof input.description === 'object' && 'en' in input.description) {\n property.description = input.description.en\n }\n\n if (input.default !== undefined) {\n property.default = input.default\n }\n\n inputSchema.properties[key] = property\n\n if (input.required) {\n inputSchema.required.push(key)\n }\n }\n })\n\n return inputSchema\n}\n\nconst convertJsonSchemaTypeToWarpType = (type: string, format?: string): WarpActionInputType => {\n if (format === 'date-time' || format === 'date') return 'string'\n if (type === 'string') return 'string'\n if (type === 'number') return 'uint256'\n if (type === 'integer') return 'uint256'\n if (type === 'boolean') return 'bool'\n if (type === 'array') return 'string'\n if (type === 'object') return 'string'\n return 'string'\n}\n\nconst convertWarpTypeToJsonSchemaType = (warpType: string): { type: string; format?: string } => {\n if (warpType === 'string') return { type: 'string' }\n if (warpType === 'bool') return { type: 'boolean' }\n if (\n warpType === 'uint8' ||\n warpType === 'uint16' ||\n warpType === 'uint32' ||\n warpType === 'uint64' ||\n warpType === 'uint128' ||\n warpType === 'uint256' ||\n warpType === 'biguint'\n ) {\n return { type: 'integer' }\n }\n if (warpType === 'number') return { type: 'number' }\n return { type: 'string' }\n}\n","import { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { Warp, WarpClientConfig } from '@vleap/warps'\nimport { convertMcpToolToWarp } from './helpers/warps'\n\nexport class WarpMcp {\n constructor(private readonly config: WarpClientConfig) {}\n\n async getWarpsFromTools(url: string, headers?: Record<string, string>): Promise<Warp[]> {\n const transport = new StreamableHTTPClientTransport(new URL(url), {\n requestInit: { headers: headers || {} },\n })\n\n const client = new Client({ name: 'warps-mcp-client', version: '1.0.0' }, { capabilities: {} })\n\n try {\n await client.connect(transport)\n\n const tools = await client.listTools()\n\n await client.close()\n\n return await Promise.all(tools.tools.map((tool) => convertMcpToolToWarp(this.config, tool, url, headers)))\n } catch (error) {\n await client.close().catch(() => {})\n throw error\n }\n }\n}\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -41,7 +41,6 @@ var convertMcpToolToWarp = async (config, tool, url, headers) => {
41
41
  };
42
42
  var convertWarpToMcpCapabilities = (warp) => {
43
43
  const tools = [];
44
- const resources = [];
45
44
  const description = warp.description && typeof warp.description === "object" && "en" in warp.description ? warp.description.en : void 0;
46
45
  const outputSchema = {
47
46
  type: "object",
@@ -59,86 +58,65 @@ var convertWarpToMcpCapabilities = (warp) => {
59
58
  warp.actions.forEach((action, index) => {
60
59
  const actionDescription = action.description && typeof action.description === "object" && "en" in action.description ? action.description.en : void 0;
61
60
  const finalDescription = description || actionDescription || void 0;
62
- if (action.type === "transfer" || action.type === "contract") {
63
- const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index);
61
+ let isReadonly = false;
62
+ if (action.type === "query") {
63
+ isReadonly = true;
64
+ const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index, isReadonly);
64
65
  tools.push(tool);
65
- } else if (action.type === "query") {
66
- const resource = convertActionToResource(warp, action, finalDescription, index);
67
- resources.push(resource);
68
66
  } else if (action.type === "collect") {
69
67
  const collectAction = action;
70
- if (collectAction.destination && typeof collectAction.destination === "object" && "method" in collectAction.destination && (collectAction.destination.method === "POST" || collectAction.destination.method === "PUT" || collectAction.destination.method === "DELETE")) {
71
- const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index);
72
- tools.push(tool);
73
- } else {
74
- const resource = convertActionToResource(warp, action, finalDescription, index);
75
- resources.push(resource);
76
- }
68
+ const method = collectAction.destination && typeof collectAction.destination === "object" && "method" in collectAction.destination ? collectAction.destination.method : "GET";
69
+ isReadonly = method === "GET";
70
+ const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index, isReadonly);
71
+ tools.push(tool);
72
+ } else if (action.type === "transfer" || action.type === "contract") {
73
+ const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : void 0, index, isReadonly);
74
+ tools.push(tool);
77
75
  } else if (action.type === "mcp") {
78
76
  const mcpAction = action;
79
77
  if (mcpAction.destination) {
80
- const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : void 0);
78
+ const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : void 0, isReadonly);
81
79
  tools.push(tool);
82
80
  }
83
81
  }
84
82
  });
85
- return { tools, resources };
83
+ return { tools };
86
84
  };
87
85
  var sanitizeMcpName = (name) => {
88
86
  return name.replace(/\s+/g, "_").replace(/:/g, "_").replace(/[^A-Za-z0-9_.-]/g, "_").replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, "").replace(/_+/g, "_");
89
87
  };
90
- var convertActionToTool = (warp, action, description, outputSchema, index) => {
88
+ var convertActionToTool = (warp, action, description, outputSchema, index, readonly = false) => {
91
89
  const inputSchema = buildInputSchema(action.inputs || []);
92
90
  const name = sanitizeMcpName(`${warp.name}_${index}`);
93
91
  let url;
94
92
  let headers;
95
93
  if (action.type === "collect") {
96
- const collectAction = action;
97
- if (collectAction.destination && typeof collectAction.destination === "object" && "url" in collectAction.destination) {
98
- url = collectAction.destination.url;
99
- headers = collectAction.destination.headers;
100
- }
101
- }
102
- return {
103
- name,
104
- description,
105
- inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : void 0,
106
- outputSchema,
107
- url,
108
- headers
109
- };
110
- };
111
- var convertActionToResource = (warp, action, description, index) => {
112
- const name = sanitizeMcpName(`${warp.name}_${index}`);
113
- let uri;
114
- let mimeType;
115
- let headers;
116
- if (action.type === "query") {
117
- const queryAction = action;
118
- if (queryAction.address) {
119
- uri = queryAction.address;
120
- }
121
- } else if (action.type === "collect") {
122
94
  const collectAction = action;
123
95
  if (collectAction.destination) {
124
96
  if (typeof collectAction.destination === "string") {
125
- uri = collectAction.destination;
97
+ url = collectAction.destination;
126
98
  } else if (typeof collectAction.destination === "object" && "url" in collectAction.destination) {
127
- uri = collectAction.destination.url;
99
+ url = collectAction.destination.url;
128
100
  headers = collectAction.destination.headers;
129
- mimeType = "application/json";
130
101
  }
131
102
  }
103
+ } else if (action.type === "query") {
104
+ const queryAction = action;
105
+ if (queryAction.address) {
106
+ url = queryAction.address;
107
+ }
132
108
  }
133
109
  return {
134
- uri: uri || name,
135
110
  name,
136
111
  description,
137
- mimeType,
138
- headers
112
+ inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : void 0,
113
+ outputSchema,
114
+ url,
115
+ headers,
116
+ readonly
139
117
  };
140
118
  };
141
- var convertMcpActionToTool = (warp, action, description, outputSchema) => {
119
+ var convertMcpActionToTool = (warp, action, description, outputSchema, readonly = false) => {
142
120
  const inputSchema = buildInputSchema(action.inputs || []);
143
121
  const { url, tool: toolName, headers } = action.destination;
144
122
  return {
@@ -147,7 +125,8 @@ var convertMcpActionToTool = (warp, action, description, outputSchema) => {
147
125
  inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : void 0,
148
126
  outputSchema,
149
127
  url,
150
- headers
128
+ headers,
129
+ readonly
151
130
  };
152
131
  };
153
132
  var buildInputSchema = (inputs) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/helpers/warps.ts","../src/WarpMcp.ts"],"sourcesContent":["import {\n Warp,\n WarpActionInput,\n WarpActionInputType,\n WarpBuilder,\n WarpClientConfig,\n WarpCollectAction,\n WarpContractAction,\n WarpMcpAction,\n WarpQueryAction,\n WarpTransferAction,\n} from '@vleap/warps'\n\nexport const convertMcpToolToWarp = async (\n config: WarpClientConfig,\n tool: { name: string; description?: string; inputSchema?: any; outputSchema?: any },\n url: string,\n headers?: Record<string, string>\n): Promise<Warp> => {\n const inputs: WarpActionInput[] = []\n\n if (tool.inputSchema && tool.inputSchema.properties) {\n const properties = tool.inputSchema.properties\n const required = tool.inputSchema.required || []\n\n Object.entries(properties).forEach(([key, value]: [string, any]) => {\n const isRequired = required.includes(key)\n const inputType = convertJsonSchemaTypeToWarpType(value.type, value.format)\n\n const inputDef: WarpActionInput = {\n name: key,\n label: value.title || { en: key },\n description: value.description ? { en: value.description.trim() } : null,\n type: inputType,\n position: `payload:${key}`,\n source: 'field',\n required: isRequired,\n default: value.default,\n }\n\n inputs.push(inputDef)\n })\n }\n\n const output: Record<string, string> = {}\n if (tool.outputSchema && tool.outputSchema.properties) {\n const properties = tool.outputSchema.properties\n Object.keys(properties).forEach((key) => {\n output[key] = `out.${key}`\n })\n }\n\n const mcpAction: WarpMcpAction = {\n type: 'mcp',\n label: { en: tool.name },\n description: tool.description ? { en: tool.description.trim() } : null,\n destination: { url, tool: tool.name, headers },\n inputs,\n }\n\n return await new WarpBuilder(config)\n .setName(tool.name)\n .setTitle({ en: tool.name })\n .setDescription(tool.description ? { en: tool.description.trim() } : null)\n .addAction(mcpAction)\n .setOutput(Object.keys(output).length > 0 ? output : null)\n .build(false)\n}\n\nexport const convertWarpToMcpCapabilities = (warp: Warp): { tools: any[]; resources: any[] } => {\n const tools: any[] = []\n const resources: any[] = []\n\n const description = warp.description && typeof warp.description === 'object' && 'en' in warp.description ? warp.description.en : undefined\n\n const outputSchema: any = {\n type: 'object',\n properties: {},\n }\n\n if (warp.output && Object.keys(warp.output).length > 0) {\n Object.keys(warp.output).forEach((key) => {\n outputSchema.properties[key] = {\n type: 'string',\n description: `Output field ${key}`,\n }\n })\n }\n\n const hasOutput = Object.keys(outputSchema.properties).length > 0\n\n warp.actions.forEach((action, index) => {\n const actionDescription =\n action.description && typeof action.description === 'object' && 'en' in action.description ? action.description.en : undefined\n\n const finalDescription = description || actionDescription || undefined\n\n if (action.type === 'transfer' || action.type === 'contract') {\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index)\n tools.push(tool)\n } else if (action.type === 'query') {\n const resource = convertActionToResource(warp, action, finalDescription, index)\n resources.push(resource)\n } else if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (\n collectAction.destination &&\n typeof collectAction.destination === 'object' &&\n 'method' in collectAction.destination &&\n (collectAction.destination.method === 'POST' ||\n collectAction.destination.method === 'PUT' ||\n collectAction.destination.method === 'DELETE')\n ) {\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index)\n tools.push(tool)\n } else {\n const resource = convertActionToResource(warp, action, finalDescription, index)\n resources.push(resource)\n }\n } else if (action.type === 'mcp') {\n const mcpAction = action as WarpMcpAction\n if (mcpAction.destination) {\n const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : undefined)\n tools.push(tool)\n }\n }\n })\n\n return { tools, resources }\n}\n\nconst sanitizeMcpName = (name: string): string => {\n return name\n .replace(/\\s+/g, '_')\n .replace(/:/g, '_')\n .replace(/[^A-Za-z0-9_.-]/g, '_')\n .replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, '')\n .replace(/_+/g, '_')\n}\n\nconst convertActionToTool = (\n warp: Warp,\n action: WarpTransferAction | WarpContractAction | WarpCollectAction,\n description: string | undefined,\n outputSchema: any | undefined,\n index: number\n): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const name = sanitizeMcpName(`${warp.name}_${index}`)\n\n let url: string | undefined\n let headers: Record<string, string> | undefined\n\n if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (collectAction.destination && typeof collectAction.destination === 'object' && 'url' in collectAction.destination) {\n url = collectAction.destination.url\n headers = collectAction.destination.headers\n }\n }\n\n return {\n name,\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n }\n}\n\nconst convertActionToResource = (\n warp: Warp,\n action: WarpQueryAction | WarpCollectAction,\n description: string | undefined,\n index: number\n): any => {\n const name = sanitizeMcpName(`${warp.name}_${index}`)\n let uri: string | undefined\n let mimeType: string | undefined\n let headers: Record<string, string> | undefined\n\n if (action.type === 'query') {\n const queryAction = action as WarpQueryAction\n if (queryAction.address) {\n uri = queryAction.address\n }\n } else if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (collectAction.destination) {\n if (typeof collectAction.destination === 'string') {\n uri = collectAction.destination\n } else if (typeof collectAction.destination === 'object' && 'url' in collectAction.destination) {\n uri = collectAction.destination.url\n headers = collectAction.destination.headers\n mimeType = 'application/json'\n }\n }\n }\n\n return {\n uri: uri || name,\n name,\n description,\n mimeType,\n headers,\n }\n}\n\nconst convertMcpActionToTool = (warp: Warp, action: WarpMcpAction, description: string | undefined, outputSchema: any | undefined): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const { url, tool: toolName, headers } = action.destination!\n\n return {\n name: sanitizeMcpName(toolName),\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n }\n}\n\nconst buildInputSchema = (inputs: WarpActionInput[]): any => {\n const inputSchema: any = {\n type: 'object',\n properties: {},\n required: [],\n }\n\n inputs.forEach((input) => {\n if (input.position && typeof input.position === 'string' && input.position.startsWith('payload:')) {\n const key = input.position.replace('payload:', '')\n const jsonSchemaType = convertWarpTypeToJsonSchemaType(input.type)\n\n const property: any = {\n type: jsonSchemaType.type,\n }\n\n if (jsonSchemaType.format) {\n property.format = jsonSchemaType.format\n }\n\n if (input.label && typeof input.label === 'object' && 'en' in input.label) {\n property.title = input.label.en\n }\n\n if (input.description && typeof input.description === 'object' && 'en' in input.description) {\n property.description = input.description.en\n }\n\n if (input.default !== undefined) {\n property.default = input.default\n }\n\n inputSchema.properties[key] = property\n\n if (input.required) {\n inputSchema.required.push(key)\n }\n }\n })\n\n return inputSchema\n}\n\nconst convertJsonSchemaTypeToWarpType = (type: string, format?: string): WarpActionInputType => {\n if (format === 'date-time' || format === 'date') return 'string'\n if (type === 'string') return 'string'\n if (type === 'number') return 'uint256'\n if (type === 'integer') return 'uint256'\n if (type === 'boolean') return 'bool'\n if (type === 'array') return 'string'\n if (type === 'object') return 'string'\n return 'string'\n}\n\nconst convertWarpTypeToJsonSchemaType = (warpType: string): { type: string; format?: string } => {\n if (warpType === 'string') return { type: 'string' }\n if (warpType === 'bool') return { type: 'boolean' }\n if (\n warpType === 'uint8' ||\n warpType === 'uint16' ||\n warpType === 'uint32' ||\n warpType === 'uint64' ||\n warpType === 'uint128' ||\n warpType === 'uint256' ||\n warpType === 'biguint'\n ) {\n return { type: 'integer' }\n }\n if (warpType === 'number') return { type: 'number' }\n return { type: 'string' }\n}\n","import { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { Warp, WarpClientConfig } from '@vleap/warps'\nimport { convertMcpToolToWarp } from './helpers/warps'\n\nexport class WarpMcp {\n constructor(private readonly config: WarpClientConfig) {}\n\n async getWarpsFromTools(url: string, headers?: Record<string, string>): Promise<Warp[]> {\n const transport = new StreamableHTTPClientTransport(new URL(url), {\n requestInit: { headers: headers || {} },\n })\n\n const client = new Client({ name: 'warps-mcp-client', version: '1.0.0' }, { capabilities: {} })\n\n try {\n await client.connect(transport)\n\n const tools = await client.listTools()\n\n await client.close()\n\n return await Promise.all(tools.tools.map((tool) => convertMcpToolToWarp(this.config, tool, url, headers)))\n } catch (error) {\n await client.close().catch(() => {})\n throw error\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/helpers/warps.ts","../src/WarpMcp.ts"],"sourcesContent":["import {\n Warp,\n WarpActionInput,\n WarpActionInputType,\n WarpBuilder,\n WarpClientConfig,\n WarpCollectAction,\n WarpContractAction,\n WarpMcpAction,\n WarpQueryAction,\n WarpTransferAction,\n} from '@vleap/warps'\n\nexport const convertMcpToolToWarp = async (\n config: WarpClientConfig,\n tool: { name: string; description?: string; inputSchema?: any; outputSchema?: any },\n url: string,\n headers?: Record<string, string>\n): Promise<Warp> => {\n const inputs: WarpActionInput[] = []\n\n if (tool.inputSchema && tool.inputSchema.properties) {\n const properties = tool.inputSchema.properties\n const required = tool.inputSchema.required || []\n\n Object.entries(properties).forEach(([key, value]: [string, any]) => {\n const isRequired = required.includes(key)\n const inputType = convertJsonSchemaTypeToWarpType(value.type, value.format)\n\n const inputDef: WarpActionInput = {\n name: key,\n label: value.title || { en: key },\n description: value.description ? { en: value.description.trim() } : null,\n type: inputType,\n position: `payload:${key}`,\n source: 'field',\n required: isRequired,\n default: value.default,\n }\n\n inputs.push(inputDef)\n })\n }\n\n const output: Record<string, string> = {}\n if (tool.outputSchema && tool.outputSchema.properties) {\n const properties = tool.outputSchema.properties\n Object.keys(properties).forEach((key) => {\n output[key] = `out.${key}`\n })\n }\n\n const mcpAction: WarpMcpAction = {\n type: 'mcp',\n label: { en: tool.name },\n description: tool.description ? { en: tool.description.trim() } : null,\n destination: { url, tool: tool.name, headers },\n inputs,\n }\n\n return await new WarpBuilder(config)\n .setName(tool.name)\n .setTitle({ en: tool.name })\n .setDescription(tool.description ? { en: tool.description.trim() } : null)\n .addAction(mcpAction)\n .setOutput(Object.keys(output).length > 0 ? output : null)\n .build(false)\n}\n\nexport const convertWarpToMcpCapabilities = (warp: Warp): { tools: any[] } => {\n const tools: any[] = []\n\n const description = warp.description && typeof warp.description === 'object' && 'en' in warp.description ? warp.description.en : undefined\n\n const outputSchema: any = {\n type: 'object',\n properties: {},\n }\n\n if (warp.output && Object.keys(warp.output).length > 0) {\n Object.keys(warp.output).forEach((key) => {\n outputSchema.properties[key] = {\n type: 'string',\n description: `Output field ${key}`,\n }\n })\n }\n\n const hasOutput = Object.keys(outputSchema.properties).length > 0\n\n warp.actions.forEach((action, index) => {\n const actionDescription =\n action.description && typeof action.description === 'object' && 'en' in action.description ? action.description.en : undefined\n\n const finalDescription = description || actionDescription || undefined\n\n let isReadonly = false\n\n if (action.type === 'query') {\n isReadonly = true\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index, isReadonly)\n tools.push(tool)\n } else if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n const method = collectAction.destination && typeof collectAction.destination === 'object' && 'method' in collectAction.destination\n ? collectAction.destination.method\n : 'GET'\n isReadonly = method === 'GET'\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index, isReadonly)\n tools.push(tool)\n } else if (action.type === 'transfer' || action.type === 'contract') {\n const tool = convertActionToTool(warp, action, finalDescription, hasOutput ? outputSchema : undefined, index, isReadonly)\n tools.push(tool)\n } else if (action.type === 'mcp') {\n const mcpAction = action as WarpMcpAction\n if (mcpAction.destination) {\n const tool = convertMcpActionToTool(warp, mcpAction, finalDescription, hasOutput ? outputSchema : undefined, isReadonly)\n tools.push(tool)\n }\n }\n })\n\n return { tools }\n}\n\nconst sanitizeMcpName = (name: string): string => {\n return name\n .replace(/\\s+/g, '_')\n .replace(/:/g, '_')\n .replace(/[^A-Za-z0-9_.-]/g, '_')\n .replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, '')\n .replace(/_+/g, '_')\n}\n\nconst convertActionToTool = (\n warp: Warp,\n action: WarpTransferAction | WarpContractAction | WarpCollectAction | WarpQueryAction,\n description: string | undefined,\n outputSchema: any | undefined,\n index: number,\n readonly: boolean = false\n): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const name = sanitizeMcpName(`${warp.name}_${index}`)\n\n let url: string | undefined\n let headers: Record<string, string> | undefined\n\n if (action.type === 'collect') {\n const collectAction = action as WarpCollectAction\n if (collectAction.destination) {\n if (typeof collectAction.destination === 'string') {\n url = collectAction.destination\n } else if (typeof collectAction.destination === 'object' && 'url' in collectAction.destination) {\n url = collectAction.destination.url\n headers = collectAction.destination.headers\n }\n }\n } else if (action.type === 'query') {\n const queryAction = action as WarpQueryAction\n if (queryAction.address) {\n url = queryAction.address\n }\n }\n\n return {\n name,\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n readonly,\n }\n}\n\nconst convertMcpActionToTool = (warp: Warp, action: WarpMcpAction, description: string | undefined, outputSchema: any | undefined, readonly: boolean = false): any => {\n const inputSchema = buildInputSchema(action.inputs || [])\n const { url, tool: toolName, headers } = action.destination!\n\n return {\n name: sanitizeMcpName(toolName),\n description,\n inputSchema: Object.keys(inputSchema.properties).length > 0 ? inputSchema : undefined,\n outputSchema,\n url,\n headers,\n readonly,\n }\n}\n\nconst buildInputSchema = (inputs: WarpActionInput[]): any => {\n const inputSchema: any = {\n type: 'object',\n properties: {},\n required: [],\n }\n\n inputs.forEach((input) => {\n if (input.position && typeof input.position === 'string' && input.position.startsWith('payload:')) {\n const key = input.position.replace('payload:', '')\n const jsonSchemaType = convertWarpTypeToJsonSchemaType(input.type)\n\n const property: any = {\n type: jsonSchemaType.type,\n }\n\n if (jsonSchemaType.format) {\n property.format = jsonSchemaType.format\n }\n\n if (input.label && typeof input.label === 'object' && 'en' in input.label) {\n property.title = input.label.en\n }\n\n if (input.description && typeof input.description === 'object' && 'en' in input.description) {\n property.description = input.description.en\n }\n\n if (input.default !== undefined) {\n property.default = input.default\n }\n\n inputSchema.properties[key] = property\n\n if (input.required) {\n inputSchema.required.push(key)\n }\n }\n })\n\n return inputSchema\n}\n\nconst convertJsonSchemaTypeToWarpType = (type: string, format?: string): WarpActionInputType => {\n if (format === 'date-time' || format === 'date') return 'string'\n if (type === 'string') return 'string'\n if (type === 'number') return 'uint256'\n if (type === 'integer') return 'uint256'\n if (type === 'boolean') return 'bool'\n if (type === 'array') return 'string'\n if (type === 'object') return 'string'\n return 'string'\n}\n\nconst convertWarpTypeToJsonSchemaType = (warpType: string): { type: string; format?: string } => {\n if (warpType === 'string') return { type: 'string' }\n if (warpType === 'bool') return { type: 'boolean' }\n if (\n warpType === 'uint8' ||\n warpType === 'uint16' ||\n warpType === 'uint32' ||\n warpType === 'uint64' ||\n warpType === 'uint128' ||\n warpType === 'uint256' ||\n warpType === 'biguint'\n ) {\n return { type: 'integer' }\n }\n if (warpType === 'number') return { type: 'number' }\n return { type: 'string' }\n}\n","import { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport { Warp, WarpClientConfig } from '@vleap/warps'\nimport { convertMcpToolToWarp } from './helpers/warps'\n\nexport class WarpMcp {\n constructor(private readonly config: WarpClientConfig) {}\n\n async getWarpsFromTools(url: string, headers?: Record<string, string>): Promise<Warp[]> {\n const transport = new StreamableHTTPClientTransport(new URL(url), {\n requestInit: { headers: headers || {} },\n })\n\n const client = new Client({ name: 'warps-mcp-client', version: '1.0.0' }, { capabilities: {} })\n\n try {\n await client.connect(transport)\n\n const tools = await client.listTools()\n\n await client.close()\n\n return await Promise.all(tools.tools.map((tool) => convertMcpToolToWarp(this.config, tool, url, headers)))\n } catch (error) {\n await client.close().catch(() => {})\n throw error\n }\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-mcp",
3
- "version": "1.0.0-beta.6",
3
+ "version": "1.0.0-beta.7",
4
4
  "description": "MCP adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",