From 40fca2f19daf5baaab210592f3590b4bbdc38cc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 26 Aug 2025 10:48:00 +0200 Subject: [PATCH 1/2] feat: rename to mcp-client --- CHANGELOG.md | 16 ++--- README.md | 14 ++--- package-lock.json | 4 +- package.json | 8 +-- src/{McpTestClient.ts => McpClient.ts} | 62 ++++++++----------- src/index.ts | 30 ++++----- src/prompts/McpPromptGetResponse.ts | 23 +++++++ src/prompts/McpPromptListResponse.ts | 14 +++++ ...stPromptMessage.ts => McpPromptMessage.ts} | 8 +-- src/prompts/McpPromptsListResponse.ts | 17 +++++ src/prompts/McpTestPromptGetResponse.ts | 25 -------- src/prompts/McpTestPromptListResponse.ts | 19 ------ src/prompts/McpTestPromptsListResponse.ts | 19 ------ ....ts => McpResourceTemplateListResponse.ts} | 8 +-- .../McpResourceTemplatesListResponse.ts | 21 +++++++ .../McpTestResourceTemplatesListResponse.ts | 21 ------- ...Response.ts => McpResourceListResponse.ts} | 8 +-- src/resources/McpResourcesListResponse.ts | 19 ++++++ src/resources/McpResourcesReadResponse.ts | 44 +++++++++++++ ....ts => McpResourcesReadResponseContent.ts} | 10 +-- src/resources/McpTestResourcesListResponse.ts | 19 ------ src/resources/McpTestResourcesReadResponse.ts | 44 ------------- src/tools/McpTestToolCallResponse.ts | 27 -------- src/tools/McpTestToolListResponse.ts | 14 ----- src/tools/McpTestToolsListResponse.ts | 19 ------ src/tools/McpToolCallResponse.ts | 27 ++++++++ ...cpTestToolContent.ts => McpToolContent.ts} | 8 +-- src/tools/McpToolListResponse.ts | 14 +++++ src/tools/McpToolsListResponse.ts | 17 +++++ 29 files changed, 279 insertions(+), 300 deletions(-) rename src/{McpTestClient.ts => McpClient.ts} (57%) create mode 100644 src/prompts/McpPromptGetResponse.ts create mode 100644 src/prompts/McpPromptListResponse.ts rename src/prompts/{McpTestPromptMessage.ts => McpPromptMessage.ts} (51%) create mode 100644 src/prompts/McpPromptsListResponse.ts delete mode 100644 src/prompts/McpTestPromptGetResponse.ts delete mode 100644 src/prompts/McpTestPromptListResponse.ts delete mode 100644 src/prompts/McpTestPromptsListResponse.ts rename src/resource-templates/{McpTestResourceTemplateListResponse.ts => McpResourceTemplateListResponse.ts} (63%) create mode 100644 src/resource-templates/McpResourceTemplatesListResponse.ts delete mode 100644 src/resource-templates/McpTestResourceTemplatesListResponse.ts rename src/resources/{McpTestResourceListResponse.ts => McpResourceListResponse.ts} (60%) create mode 100644 src/resources/McpResourcesListResponse.ts create mode 100644 src/resources/McpResourcesReadResponse.ts rename src/resources/{McpTestResourcesReadResponseContent.ts => McpResourcesReadResponseContent.ts} (61%) delete mode 100644 src/resources/McpTestResourcesListResponse.ts delete mode 100644 src/resources/McpTestResourcesReadResponse.ts delete mode 100644 src/tools/McpTestToolCallResponse.ts delete mode 100644 src/tools/McpTestToolListResponse.ts delete mode 100644 src/tools/McpTestToolsListResponse.ts create mode 100644 src/tools/McpToolCallResponse.ts rename src/tools/{McpTestToolContent.ts => McpToolContent.ts} (73%) create mode 100644 src/tools/McpToolListResponse.ts create mode 100644 src/tools/McpToolsListResponse.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cb7766..8ef930d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,31 +1,31 @@ # Changelog -## [0.4.0](https://github.com/CodelyTV/typescript-mcp-test-client/compare/v0.3.0...v0.4.0) (2025-08-18) +## [0.4.0](https://github.com/CodelyTV/typescript-mcp-client/compare/v0.3.0...v0.4.0) (2025-08-18) ### Features -* disable provenance while the repo is private ([42f75a7](https://github.com/CodelyTV/typescript-mcp-test-client/commit/42f75a7ed8aab71725f620d056a6a02f5b0125a8)) +* disable provenance while the repo is private ([42f75a7](https://github.com/CodelyTV/typescript-mcp-client/commit/42f75a7ed8aab71725f620d056a6a02f5b0125a8)) -## [0.3.0](https://github.com/CodelyTV/typescript-mcp-test-client/compare/v0.2.0...v0.3.0) (2025-08-18) +## [0.3.0](https://github.com/CodelyTV/typescript-mcp-client/compare/v0.2.0...v0.3.0) (2025-08-18) ### Features -* export using subfolders ([2f57fa6](https://github.com/CodelyTV/typescript-mcp-test-client/commit/2f57fa6a1739b5a1cac82ff2fa9a29a1599e92e4)) +* export using subfolders ([2f57fa6](https://github.com/CodelyTV/typescript-mcp-client/commit/2f57fa6a1739b5a1cac82ff2fa9a29a1599e92e4)) -## [0.2.0](https://github.com/CodelyTV/typescript-mcp-test-client/compare/v0.1.0...v0.2.0) (2025-08-18) +## [0.2.0](https://github.com/CodelyTV/typescript-mcp-client/compare/v0.1.0...v0.2.0) (2025-08-18) ### Features -* add initial version ([e1366aa](https://github.com/CodelyTV/typescript-mcp-test-client/commit/e1366aaba676d3a29ec14a5a2a880d9e1fb8bf2a)) +* add initial version ([e1366aa](https://github.com/CodelyTV/typescript-mcp-client/commit/e1366aaba676d3a29ec14a5a2a880d9e1fb8bf2a)) -## [0.1.0](https://github.com/CodelyTV/typescript-mcp-test-client/compare/v0.0.1...v0.1.0) (2025-08-18) +## [0.1.0](https://github.com/CodelyTV/typescript-mcp-client/compare/v0.0.1...v0.1.0) (2025-08-18) ### Features -* add initial version ([e1366aa](https://github.com/CodelyTV/typescript-mcp-test-client/commit/e1366aaba676d3a29ec14a5a2a880d9e1fb8bf2a)) +* add initial version ([e1366aa](https://github.com/CodelyTV/typescript-mcp-client/commit/e1366aaba676d3a29ec14a5a2a880d9e1fb8bf2a)) ## Changelog diff --git a/README.md b/README.md index d88ffc5..e6a211f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -# @codelytv/mcp-test-client +# @codelytv/mcp-client A TypeScript test client for Model Context Protocol (MCP) servers that provides a convenient way to test MCP functionality in your test suites. ## Installation ```bash -npm install --save-dev @codelytv/mcp-test-client +npm install --save-dev @codelytv/mcp-client ``` ## Usage @@ -13,9 +13,9 @@ npm install --save-dev @codelytv/mcp-test-client ### Basic Example ```typescript -import { McpTestClient } from '@codelytv/mcp-test-client'; +import { McpClient } from '@codelytv/mcp-client'; -const mcpClient = new McpTestClient("stdio", [ +const mcpClient = new McpClient("stdio", [ "npx", "ts-node", "./src/app/mcp/server.ts", @@ -43,18 +43,18 @@ await mcpClient.disconnect(); ### HTTP Transport ```typescript -const mcpClient = new McpTestClient("http", ["http://localhost:3000/mcp"]); +const mcpClient = new McpClient("http", ["http://localhost:3000/mcp"]); ``` ## API -### McpTestClient +### McpClient The main client class for interacting with MCP servers. #### Constructor -- `new McpTestClient(transport: "stdio" | "http", args: string[])` +- `new McpClient(transport: "stdio" | "http", args: string[])` #### Methods diff --git a/package-lock.json b/package-lock.json index c50bd78..2e36168 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "@codelytv/mcp-test-client", + "name": "@codelytv/mcp-client", "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@codelytv/mcp-test-client", + "name": "@codelytv/mcp-client", "version": "0.4.0", "license": "GPL-3.0", "dependencies": { diff --git a/package.json b/package.json index e888156..01b8b2a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@codelytv/mcp-test-client", + "name": "@codelytv/mcp-client", "version": "0.4.0", "description": "A TypeScript test client for Model Context Protocol (MCP) servers", "keywords": [ @@ -18,14 +18,14 @@ "types": "dist/src/index.d.ts", "repository": { "type": "git", - "url": "git+https://github.com/CodelyTV/typescript-mcp-test-client" + "url": "git+https://github.com/CodelyTV/typescript-mcp-client" }, "author": "codelytv", "license": "GPL-3.0", "bugs": { - "url": "https://github.com/CodelyTV/typescript-mcp-test-client/issues" + "url": "https://github.com/CodelyTV/typescript-mcp-client/issues" }, - "homepage": "https://github.com/CodelyTV/typescript-mcp-test-client#readme", + "homepage": "https://github.com/CodelyTV/typescript-mcp-client#readme", "dependencies": { "@codelytv/primitives-type": "^3.1.0", "@modelcontextprotocol/sdk": "^1.17.2" diff --git a/src/McpTestClient.ts b/src/McpClient.ts similarity index 57% rename from src/McpTestClient.ts rename to src/McpClient.ts index 4516daf..adae156 100644 --- a/src/McpTestClient.ts +++ b/src/McpClient.ts @@ -5,15 +5,15 @@ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp"; import { Transport } from "@modelcontextprotocol/sdk/shared/transport"; -import { McpTestPromptGetResponse } from "./prompts/McpTestPromptGetResponse"; -import { McpTestPromptsListResponse } from "./prompts/McpTestPromptsListResponse"; -import { McpTestResourceTemplatesListResponse } from "./resource-templates/McpTestResourceTemplatesListResponse"; -import { McpTestResourcesListResponse } from "./resources/McpTestResourcesListResponse"; -import { McpTestResourcesReadResponse } from "./resources/McpTestResourcesReadResponse"; -import { McpTestToolCallResponse } from "./tools/McpTestToolCallResponse"; -import { McpTestToolsListResponse } from "./tools/McpTestToolsListResponse"; - -export class McpTestClient { +import { McpPromptGetResponse } from "./prompts/McpPromptGetResponse"; +import { McpPromptsListResponse } from "./prompts/McpPromptsListResponse"; +import { McpResourceTemplatesListResponse } from "./resource-templates/McpResourceTemplatesListResponse"; +import { McpResourcesListResponse } from "./resources/McpResourcesListResponse"; +import { McpResourcesReadResponse } from "./resources/McpResourcesReadResponse"; +import { McpToolCallResponse } from "./tools/McpToolCallResponse"; +import { McpToolsListResponse } from "./tools/McpToolsListResponse"; + +export class McpClient { private readonly client: Client; private readonly transport: Transport; @@ -23,7 +23,7 @@ export class McpTestClient { ) { this.client = new Client( { - name: "mcp-test-client", + name: "mcp-client", version: "1.0.0", }, { @@ -53,27 +53,25 @@ export class McpTestClient { await this.client.close(); } - async listTools(): Promise { + async listTools(): Promise { const response = await this.client.listTools(); - return McpTestToolsListResponse.fromPrimitives( - response as Primitives, - ); + return McpToolsListResponse.fromPrimitives(response as Primitives); } - async listResources(): Promise { + async listResources(): Promise { const response = await this.client.listResources(); - return McpTestResourcesListResponse.fromPrimitives( - response as Primitives, + return McpResourcesListResponse.fromPrimitives( + response as Primitives, ); } - async listResourceTemplates(): Promise { + async listResourceTemplates(): Promise { const response = await this.client.listResourceTemplates(); - return McpTestResourceTemplatesListResponse.fromPrimitives( - response as Primitives, + return McpResourceTemplatesListResponse.fromPrimitives( + response as Primitives, ); } @@ -96,30 +94,27 @@ export class McpTestClient { return response.completion.values; } - async readResource(uri: string): Promise { + async readResource(uri: string): Promise { const response = await this.client.readResource({ uri }); - return McpTestResourcesReadResponse.fromPrimitives( - response as Primitives, + return McpResourcesReadResponse.fromPrimitives( + response as Primitives, ); } - async callTool( - name: string, - args: Record = {}, - ): Promise { + async callTool(name: string, args: Record = {}): Promise { const response = await this.client.callTool({ name, arguments: args, }); - return McpTestToolCallResponse.fromPrimitives(response as Primitives); + return McpToolCallResponse.fromPrimitives(response as Primitives); } - async listPrompts(): Promise { + async listPrompts(): Promise { const response = await this.client.listPrompts(); - return McpTestPromptsListResponse.fromPrimitives({ + return McpPromptsListResponse.fromPrimitives({ prompts: response.prompts.map((prompt: any) => ({ name: prompt.name, title: prompt.title ?? "", @@ -129,10 +124,7 @@ export class McpTestClient { }); } - async getPrompt( - name: string, - args: Record = {}, - ): Promise { + async getPrompt(name: string, args: Record = {}): Promise { const response = await this.client.getPrompt({ name, arguments: Object.fromEntries( @@ -140,7 +132,7 @@ export class McpTestClient { ), }); - return McpTestPromptGetResponse.fromPrimitives({ + return McpPromptGetResponse.fromPrimitives({ messages: response.messages.map((message: any) => ({ role: message.role, content: diff --git a/src/index.ts b/src/index.ts index 27883d0..27f8e42 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,15 @@ -export { McpTestClient } from "./McpTestClient"; -export { McpTestPromptGetResponse } from "./prompts/McpTestPromptGetResponse"; -export { McpTestPromptListResponse } from "./prompts/McpTestPromptListResponse"; -export { McpTestPromptMessage } from "./prompts/McpTestPromptMessage"; -export { McpTestPromptsListResponse } from "./prompts/McpTestPromptsListResponse"; -export { McpTestResourceTemplateListResponse } from "./resource-templates/McpTestResourceTemplateListResponse"; -export { McpTestResourceTemplatesListResponse } from "./resource-templates/McpTestResourceTemplatesListResponse"; -export { McpTestResourceListResponse } from "./resources/McpTestResourceListResponse"; -export { McpTestResourcesListResponse } from "./resources/McpTestResourcesListResponse"; -export { McpTestResourcesReadResponse } from "./resources/McpTestResourcesReadResponse"; -export { McpTestResourcesReadResponseContent } from "./resources/McpTestResourcesReadResponseContent"; -export { McpTestToolCallResponse } from "./tools/McpTestToolCallResponse"; -export { McpTestToolContent } from "./tools/McpTestToolContent"; -export { McpTestToolListResponse } from "./tools/McpTestToolListResponse"; -export { McpTestToolsListResponse } from "./tools/McpTestToolsListResponse"; +export { McpClient } from "./McpClient"; +export { McpPromptGetResponse } from "./prompts/McpPromptGetResponse"; +export { McpPromptListResponse } from "./prompts/McpPromptListResponse"; +export { McpPromptMessage } from "./prompts/McpPromptMessage"; +export { McpPromptsListResponse } from "./prompts/McpPromptsListResponse"; +export { McpResourceTemplateListResponse } from "./resource-templates/McpResourceTemplateListResponse"; +export { McpResourceTemplatesListResponse } from "./resource-templates/McpResourceTemplatesListResponse"; +export { McpResourceListResponse } from "./resources/McpResourceListResponse"; +export { McpResourcesListResponse } from "./resources/McpResourcesListResponse"; +export { McpResourcesReadResponse } from "./resources/McpResourcesReadResponse"; +export { McpResourcesReadResponseContent } from "./resources/McpResourcesReadResponseContent"; +export { McpToolCallResponse } from "./tools/McpToolCallResponse"; +export { McpToolContent } from "./tools/McpToolContent"; +export { McpToolListResponse } from "./tools/McpToolListResponse"; +export { McpToolsListResponse } from "./tools/McpToolsListResponse"; diff --git a/src/prompts/McpPromptGetResponse.ts b/src/prompts/McpPromptGetResponse.ts new file mode 100644 index 0000000..9113dfa --- /dev/null +++ b/src/prompts/McpPromptGetResponse.ts @@ -0,0 +1,23 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpPromptMessage } from "./McpPromptMessage"; + +export class McpPromptGetResponse { + constructor(public readonly messages: McpPromptMessage[]) {} + + static fromPrimitives(primitives: Primitives): McpPromptGetResponse { + return new McpPromptGetResponse( + primitives.messages.map((message) => McpPromptMessage.fromPrimitives(message)), + ); + } + + toPrimitives(): Primitives { + return { + messages: this.messages.map((message) => message.toPrimitives()), + }; + } + + firstPromptText(): string { + return this.messages[0].content.text; + } +} diff --git a/src/prompts/McpPromptListResponse.ts b/src/prompts/McpPromptListResponse.ts new file mode 100644 index 0000000..2d99249 --- /dev/null +++ b/src/prompts/McpPromptListResponse.ts @@ -0,0 +1,14 @@ +import { Primitives } from "@codelytv/primitives-type"; + +export class McpPromptListResponse { + constructor( + public readonly name: string, + public readonly title: string, + public readonly description: string, + public readonly args: object, + ) {} + + static fromPrimitives(prompt: Primitives): McpPromptListResponse { + return new McpPromptListResponse(prompt.name, prompt.title, prompt.description, prompt.args); + } +} diff --git a/src/prompts/McpTestPromptMessage.ts b/src/prompts/McpPromptMessage.ts similarity index 51% rename from src/prompts/McpTestPromptMessage.ts rename to src/prompts/McpPromptMessage.ts index b501a4e..1c81ee8 100644 --- a/src/prompts/McpTestPromptMessage.ts +++ b/src/prompts/McpPromptMessage.ts @@ -1,16 +1,16 @@ import { Primitives } from "@codelytv/primitives-type"; -export class McpTestPromptMessage { +export class McpPromptMessage { constructor( public readonly role: "user" | "assistant", public readonly content: { type: string; text: string }, ) {} - static fromPrimitives(message: Primitives): McpTestPromptMessage { - return new McpTestPromptMessage(message.role, message.content); + static fromPrimitives(message: Primitives): McpPromptMessage { + return new McpPromptMessage(message.role, message.content); } - toPrimitives(): Primitives { + toPrimitives(): Primitives { return { role: this.role, content: this.content, diff --git a/src/prompts/McpPromptsListResponse.ts b/src/prompts/McpPromptsListResponse.ts new file mode 100644 index 0000000..f4aeeaf --- /dev/null +++ b/src/prompts/McpPromptsListResponse.ts @@ -0,0 +1,17 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpPromptListResponse } from "./McpPromptListResponse"; + +export class McpPromptsListResponse { + constructor(public readonly prompts: McpPromptListResponse[]) {} + + static fromPrimitives(primitives: Primitives): McpPromptsListResponse { + return new McpPromptsListResponse( + primitives.prompts.map((prompt) => McpPromptListResponse.fromPrimitives(prompt)), + ); + } + + names(): string[] { + return this.prompts.map((prompt) => prompt.name); + } +} diff --git a/src/prompts/McpTestPromptGetResponse.ts b/src/prompts/McpTestPromptGetResponse.ts deleted file mode 100644 index e8f6046..0000000 --- a/src/prompts/McpTestPromptGetResponse.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestPromptMessage } from "./McpTestPromptMessage"; - -export class McpTestPromptGetResponse { - constructor(public readonly messages: McpTestPromptMessage[]) {} - - static fromPrimitives( - primitives: Primitives, - ): McpTestPromptGetResponse { - return new McpTestPromptGetResponse( - primitives.messages.map((message) => McpTestPromptMessage.fromPrimitives(message)), - ); - } - - toPrimitives(): Primitives { - return { - messages: this.messages.map((message) => message.toPrimitives()), - }; - } - - firstPromptText(): string { - return this.messages[0].content.text; - } -} diff --git a/src/prompts/McpTestPromptListResponse.ts b/src/prompts/McpTestPromptListResponse.ts deleted file mode 100644 index 598d00c..0000000 --- a/src/prompts/McpTestPromptListResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -export class McpTestPromptListResponse { - constructor( - public readonly name: string, - public readonly title: string, - public readonly description: string, - public readonly args: object, - ) {} - - static fromPrimitives(prompt: Primitives): McpTestPromptListResponse { - return new McpTestPromptListResponse( - prompt.name, - prompt.title, - prompt.description, - prompt.args, - ); - } -} diff --git a/src/prompts/McpTestPromptsListResponse.ts b/src/prompts/McpTestPromptsListResponse.ts deleted file mode 100644 index 567422f..0000000 --- a/src/prompts/McpTestPromptsListResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestPromptListResponse } from "./McpTestPromptListResponse"; - -export class McpTestPromptsListResponse { - constructor(public readonly prompts: McpTestPromptListResponse[]) {} - - static fromPrimitives( - primitives: Primitives, - ): McpTestPromptsListResponse { - return new McpTestPromptsListResponse( - primitives.prompts.map((prompt) => McpTestPromptListResponse.fromPrimitives(prompt)), - ); - } - - names(): string[] { - return this.prompts.map((prompt) => prompt.name); - } -} diff --git a/src/resource-templates/McpTestResourceTemplateListResponse.ts b/src/resource-templates/McpResourceTemplateListResponse.ts similarity index 63% rename from src/resource-templates/McpTestResourceTemplateListResponse.ts rename to src/resource-templates/McpResourceTemplateListResponse.ts index 74fcc5a..8419287 100644 --- a/src/resource-templates/McpTestResourceTemplateListResponse.ts +++ b/src/resource-templates/McpResourceTemplateListResponse.ts @@ -1,6 +1,6 @@ import { Primitives } from "@codelytv/primitives-type"; -export class McpTestResourceTemplateListResponse { +export class McpResourceTemplateListResponse { constructor( public readonly name: string, public readonly title: string, @@ -9,9 +9,9 @@ export class McpTestResourceTemplateListResponse { ) {} static fromPrimitives( - resourceTemplate: Primitives, - ): McpTestResourceTemplateListResponse { - return new McpTestResourceTemplateListResponse( + resourceTemplate: Primitives, + ): McpResourceTemplateListResponse { + return new McpResourceTemplateListResponse( resourceTemplate.name, resourceTemplate.title, resourceTemplate.uriTemplate, diff --git a/src/resource-templates/McpResourceTemplatesListResponse.ts b/src/resource-templates/McpResourceTemplatesListResponse.ts new file mode 100644 index 0000000..a30bc98 --- /dev/null +++ b/src/resource-templates/McpResourceTemplatesListResponse.ts @@ -0,0 +1,21 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpResourceTemplateListResponse } from "./McpResourceTemplateListResponse"; + +export class McpResourceTemplatesListResponse { + constructor(public readonly resourceTemplates: McpResourceTemplateListResponse[]) {} + + static fromPrimitives( + primitives: Primitives, + ): McpResourceTemplatesListResponse { + return new McpResourceTemplatesListResponse( + primitives.resourceTemplates.map((resourceTemplate) => + McpResourceTemplateListResponse.fromPrimitives(resourceTemplate), + ), + ); + } + + uris(): string[] { + return this.resourceTemplates.map((resource) => resource.uriTemplate); + } +} diff --git a/src/resource-templates/McpTestResourceTemplatesListResponse.ts b/src/resource-templates/McpTestResourceTemplatesListResponse.ts deleted file mode 100644 index 9f84a2c..0000000 --- a/src/resource-templates/McpTestResourceTemplatesListResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestResourceTemplateListResponse } from "./McpTestResourceTemplateListResponse"; - -export class McpTestResourceTemplatesListResponse { - constructor(public readonly resourceTemplates: McpTestResourceTemplateListResponse[]) {} - - static fromPrimitives( - primitives: Primitives, - ): McpTestResourceTemplatesListResponse { - return new McpTestResourceTemplatesListResponse( - primitives.resourceTemplates.map((resourceTemplate) => - McpTestResourceTemplateListResponse.fromPrimitives(resourceTemplate), - ), - ); - } - - uris(): string[] { - return this.resourceTemplates.map((resource) => resource.uriTemplate); - } -} diff --git a/src/resources/McpTestResourceListResponse.ts b/src/resources/McpResourceListResponse.ts similarity index 60% rename from src/resources/McpTestResourceListResponse.ts rename to src/resources/McpResourceListResponse.ts index 4454132..80fbcd1 100644 --- a/src/resources/McpTestResourceListResponse.ts +++ b/src/resources/McpResourceListResponse.ts @@ -1,6 +1,6 @@ import { Primitives } from "@codelytv/primitives-type"; -export class McpTestResourceListResponse { +export class McpResourceListResponse { constructor( public readonly uri: string, public readonly name: string, @@ -8,10 +8,8 @@ export class McpTestResourceListResponse { public readonly description: string, ) {} - static fromPrimitives( - resource: Primitives, - ): McpTestResourceListResponse { - return new McpTestResourceListResponse( + static fromPrimitives(resource: Primitives): McpResourceListResponse { + return new McpResourceListResponse( resource.uri, resource.name, resource.title, diff --git a/src/resources/McpResourcesListResponse.ts b/src/resources/McpResourcesListResponse.ts new file mode 100644 index 0000000..73db7ca --- /dev/null +++ b/src/resources/McpResourcesListResponse.ts @@ -0,0 +1,19 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpResourceListResponse } from "./McpResourceListResponse"; + +export class McpResourcesListResponse { + constructor(public readonly resources: McpResourceListResponse[]) {} + + static fromPrimitives( + primitives: Primitives, + ): McpResourcesListResponse { + return new McpResourcesListResponse( + primitives.resources.map((resource) => McpResourceListResponse.fromPrimitives(resource)), + ); + } + + uris(): string[] { + return this.resources.map((resource) => resource.uri); + } +} diff --git a/src/resources/McpResourcesReadResponse.ts b/src/resources/McpResourcesReadResponse.ts new file mode 100644 index 0000000..8d5cb93 --- /dev/null +++ b/src/resources/McpResourcesReadResponse.ts @@ -0,0 +1,44 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpResourcesReadResponseContent } from "./McpResourcesReadResponseContent"; + +type McpError = { + code: number; + message: string; + data?: unknown; +}; + +export class McpResourcesReadResponse { + constructor( + public readonly contents?: McpResourcesReadResponseContent[], + public readonly error?: McpError, + ) {} + + static fromPrimitives( + primitives: Primitives, + ): McpResourcesReadResponse { + if (primitives.error) { + return new McpResourcesReadResponse(undefined, primitives.error); + } + + return new McpResourcesReadResponse( + primitives.contents?.map((content) => + McpResourcesReadResponseContent.fromPrimitives(content), + ), + ); + } + + static fromError(error: McpError): McpResourcesReadResponse { + return new McpResourcesReadResponse(undefined, error); + } + + toPrimitives(): Primitives { + if (this.error) { + return { error: this.error }; + } + + return { + contents: this.contents?.map((content) => content.toPrimitives()) ?? [], + }; + } +} diff --git a/src/resources/McpTestResourcesReadResponseContent.ts b/src/resources/McpResourcesReadResponseContent.ts similarity index 61% rename from src/resources/McpTestResourcesReadResponseContent.ts rename to src/resources/McpResourcesReadResponseContent.ts index ecf0864..f0b6c04 100644 --- a/src/resources/McpTestResourcesReadResponseContent.ts +++ b/src/resources/McpResourcesReadResponseContent.ts @@ -1,6 +1,6 @@ import { Primitives } from "@codelytv/primitives-type"; -export class McpTestResourcesReadResponseContent { +export class McpResourcesReadResponseContent { constructor( public readonly uri: string, public readonly mimeType?: string, @@ -9,9 +9,9 @@ export class McpTestResourcesReadResponseContent { ) {} static fromPrimitives( - content: Primitives, - ): McpTestResourcesReadResponseContent { - return new McpTestResourcesReadResponseContent( + content: Primitives, + ): McpResourcesReadResponseContent { + return new McpResourcesReadResponseContent( content.uri, content.mimeType, content.text, @@ -19,7 +19,7 @@ export class McpTestResourcesReadResponseContent { ); } - toPrimitives(): Primitives { + toPrimitives(): Primitives { return { uri: this.uri, mimeType: this.mimeType, diff --git a/src/resources/McpTestResourcesListResponse.ts b/src/resources/McpTestResourcesListResponse.ts deleted file mode 100644 index 9a6c9ad..0000000 --- a/src/resources/McpTestResourcesListResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestResourceListResponse } from "./McpTestResourceListResponse"; - -export class McpTestResourcesListResponse { - constructor(public readonly resources: McpTestResourceListResponse[]) {} - - static fromPrimitives( - primitives: Primitives, - ): McpTestResourcesListResponse { - return new McpTestResourcesListResponse( - primitives.resources.map((resource) => McpTestResourceListResponse.fromPrimitives(resource)), - ); - } - - uris(): string[] { - return this.resources.map((resource) => resource.uri); - } -} diff --git a/src/resources/McpTestResourcesReadResponse.ts b/src/resources/McpTestResourcesReadResponse.ts deleted file mode 100644 index 8c5532c..0000000 --- a/src/resources/McpTestResourcesReadResponse.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestResourcesReadResponseContent } from "./McpTestResourcesReadResponseContent"; - -type McpError = { - code: number; - message: string; - data?: unknown; -}; - -export class McpTestResourcesReadResponse { - constructor( - public readonly contents?: McpTestResourcesReadResponseContent[], - public readonly error?: McpError, - ) {} - - static fromPrimitives( - primitives: Primitives, - ): McpTestResourcesReadResponse { - if (primitives.error) { - return new McpTestResourcesReadResponse(undefined, primitives.error); - } - - return new McpTestResourcesReadResponse( - primitives.contents?.map((content) => - McpTestResourcesReadResponseContent.fromPrimitives(content), - ), - ); - } - - static fromError(error: McpError): McpTestResourcesReadResponse { - return new McpTestResourcesReadResponse(undefined, error); - } - - toPrimitives(): Primitives { - if (this.error) { - return { error: this.error }; - } - - return { - contents: this.contents?.map((content) => content.toPrimitives()) ?? [], - }; - } -} diff --git a/src/tools/McpTestToolCallResponse.ts b/src/tools/McpTestToolCallResponse.ts deleted file mode 100644 index d8b17d5..0000000 --- a/src/tools/McpTestToolCallResponse.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestToolContent } from "./McpTestToolContent"; - -export class McpTestToolCallResponse { - constructor( - public readonly content: McpTestToolContent[], - public readonly structuredContent?: Record, - public readonly isError?: boolean, - ) {} - - static fromPrimitives(primitives: Primitives): McpTestToolCallResponse { - return new McpTestToolCallResponse( - primitives.content.map((content) => McpTestToolContent.fromPrimitives(content)), - primitives.structuredContent, - primitives.isError, - ); - } - - toPrimitives(): Primitives { - return { - content: this.content.map((content) => content.toPrimitives()), - structuredContent: this.structuredContent, - isError: this.isError, - }; - } -} diff --git a/src/tools/McpTestToolListResponse.ts b/src/tools/McpTestToolListResponse.ts deleted file mode 100644 index 7153a33..0000000 --- a/src/tools/McpTestToolListResponse.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -export class McpTestToolListResponse { - constructor( - public readonly name: string, - public readonly title: string, - public readonly description: string, - public readonly inputSchema: object, - ) {} - - static fromPrimitives(tool: Primitives): McpTestToolListResponse { - return new McpTestToolListResponse(tool.name, tool.title, tool.description, tool.inputSchema); - } -} diff --git a/src/tools/McpTestToolsListResponse.ts b/src/tools/McpTestToolsListResponse.ts deleted file mode 100644 index c1c936b..0000000 --- a/src/tools/McpTestToolsListResponse.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Primitives } from "@codelytv/primitives-type"; - -import { McpTestToolListResponse } from "./McpTestToolListResponse"; - -export class McpTestToolsListResponse { - constructor(public readonly tools: McpTestToolListResponse[]) {} - - static fromPrimitives( - primitives: Primitives, - ): McpTestToolsListResponse { - return new McpTestToolsListResponse( - primitives.tools.map((tool) => McpTestToolListResponse.fromPrimitives(tool)), - ); - } - - names(): string[] { - return this.tools.map((tool) => tool.name); - } -} diff --git a/src/tools/McpToolCallResponse.ts b/src/tools/McpToolCallResponse.ts new file mode 100644 index 0000000..7c319de --- /dev/null +++ b/src/tools/McpToolCallResponse.ts @@ -0,0 +1,27 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpToolContent } from "./McpToolContent"; + +export class McpToolCallResponse { + constructor( + public readonly content: McpToolContent[], + public readonly structuredContent?: Record, + public readonly isError?: boolean, + ) {} + + static fromPrimitives(primitives: Primitives): McpToolCallResponse { + return new McpToolCallResponse( + primitives.content.map((content) => McpToolContent.fromPrimitives(content)), + primitives.structuredContent, + primitives.isError, + ); + } + + toPrimitives(): Primitives { + return { + content: this.content.map((content) => content.toPrimitives()), + structuredContent: this.structuredContent, + isError: this.isError, + }; + } +} diff --git a/src/tools/McpTestToolContent.ts b/src/tools/McpToolContent.ts similarity index 73% rename from src/tools/McpTestToolContent.ts rename to src/tools/McpToolContent.ts index 3f0b660..3f95081 100644 --- a/src/tools/McpTestToolContent.ts +++ b/src/tools/McpToolContent.ts @@ -1,6 +1,6 @@ import { Primitives } from "@codelytv/primitives-type"; -export class McpTestToolContent { +export class McpToolContent { constructor( public readonly type: "text" | "image" | "resource", public readonly text?: string, @@ -13,8 +13,8 @@ export class McpTestToolContent { }, ) {} - static fromPrimitives(content: Primitives): McpTestToolContent { - return new McpTestToolContent( + static fromPrimitives(content: Primitives): McpToolContent { + return new McpToolContent( content.type, content.text, content.data, @@ -23,7 +23,7 @@ export class McpTestToolContent { ); } - toPrimitives(): Primitives { + toPrimitives(): Primitives { return { type: this.type, text: this.text, diff --git a/src/tools/McpToolListResponse.ts b/src/tools/McpToolListResponse.ts new file mode 100644 index 0000000..2d0cf77 --- /dev/null +++ b/src/tools/McpToolListResponse.ts @@ -0,0 +1,14 @@ +import { Primitives } from "@codelytv/primitives-type"; + +export class McpToolListResponse { + constructor( + public readonly name: string, + public readonly title: string, + public readonly description: string, + public readonly inputSchema: object, + ) {} + + static fromPrimitives(tool: Primitives): McpToolListResponse { + return new McpToolListResponse(tool.name, tool.title, tool.description, tool.inputSchema); + } +} diff --git a/src/tools/McpToolsListResponse.ts b/src/tools/McpToolsListResponse.ts new file mode 100644 index 0000000..e70704f --- /dev/null +++ b/src/tools/McpToolsListResponse.ts @@ -0,0 +1,17 @@ +import { Primitives } from "@codelytv/primitives-type"; + +import { McpToolListResponse } from "./McpToolListResponse"; + +export class McpToolsListResponse { + constructor(public readonly tools: McpToolListResponse[]) {} + + static fromPrimitives(primitives: Primitives): McpToolsListResponse { + return new McpToolsListResponse( + primitives.tools.map((tool) => McpToolListResponse.fromPrimitives(tool)), + ); + } + + names(): string[] { + return this.tools.map((tool) => tool.name); + } +} From 7b7eec0111cb96f0e53e5e439b8eea8a87414e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 26 Aug 2025 10:50:24 +0200 Subject: [PATCH 2/2] feat: rename to mcp-client --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d82b44..986c6e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "@codelytv/mcp-test-client", + "name": "@codelytv/mcp-client", "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@codelytv/mcp-test-client", + "name": "@codelytv/mcp-client", "version": "0.5.0", "license": "GPL-3.0", "dependencies": {