diff --git a/eslint.config.mjs b/eslint.config.mjs index 5ba36a604..59ef400da 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -63,6 +63,7 @@ export default [ '@frontmcp/uipack', '@frontmcp/uipack/*', '@frontmcp/protocol', + '@frontmcp/protocol/client', '@frontmcp/testing', '@frontmcp/observability', '^#(mcp-.+|crypto-.+|async-.+|event-.+|langchain-.+|sse-.+|express-.+|server-.+|stdio-.+|env|runtime-context|path|client|import-computed|js-yaml|semver|uipack-render)$', diff --git a/libs/protocol/README.md b/libs/protocol/README.md index 20a572919..53762ebc6 100644 --- a/libs/protocol/README.md +++ b/libs/protocol/README.md @@ -1,6 +1,6 @@ # @frontmcp/protocol -FrontMCP's single point of contact with the upstream [`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk): it re-exports the MCP protocol types, server, client and transports that the other `@frontmcp/*` packages use. This is an internal package, published only so those packages can depend on it. Don't import it from application code: import MCP types from [`@frontmcp/sdk`](https://www.npmjs.com/package/@frontmcp/sdk), and use `McpClient` from [`@frontmcp/testing`](https://www.npmjs.com/package/@frontmcp/testing) when a test needs a raw client. +FrontMCP's single point of contact with the upstream [`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk): it re-exports the MCP protocol types, server, client and transports that the other `@frontmcp/*` packages use. The client and its transports come from the `@frontmcp/protocol/client` subpath, so a server, or a browser or Worker bundle of one, doesn't load them. This is an internal package, published only so those packages can depend on it. Don't import it from application code: import MCP types from [`@frontmcp/sdk`](https://www.npmjs.com/package/@frontmcp/sdk), and use `McpClient` from [`@frontmcp/testing`](https://www.npmjs.com/package/@frontmcp/testing) when a test needs a raw client. [![npm](https://img.shields.io/npm/v/@frontmcp/protocol.svg)](https://www.npmjs.com/package/@frontmcp/protocol) [![License](https://img.shields.io/npm/l/@frontmcp/protocol.svg)](https://github.com/agentfront/frontmcp/blob/main/LICENSE) @@ -10,13 +10,13 @@ You don't install it yourself: `@frontmcp/sdk` depends on it. It needs Node.js 2 ## What it exports -| Area | Contents | -| ------------------- | ---------------------------------------------------------------------------------------------------------------- | -| Protocol types | Everything in `@modelcontextprotocol/sdk/types.js`: requests, results, notifications, schemas, `McpError` | -| Protocol 2026-07-28 | `MCP_20260728_META`, `MCP_20260728_ERROR_CODES`, `CacheableResult`, `DiscoverResult`, `InputRequiredResult`, … | -| Server | `McpServer`, `StreamableHTTPServerTransport`, `WebStandardStreamableHTTPServerTransport`, `StdioServerTransport` | -| Client | `Client`, `StreamableHTTPClientTransport`, `SSEClientTransport`, `StdioClientTransport` | -| Other | `InMemoryTransport`, `Transport`, `RequestHandlerExtra`, `AuthInfo` | +| Area | Contents | +| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | +| Protocol types | Everything in `@modelcontextprotocol/sdk/types.js`: requests, results, notifications, schemas, `McpError` | +| Protocol 2026-07-28 | `MCP_20260728_META`, `MCP_20260728_ERROR_CODES`, `CacheableResult`, `DiscoverResult`, `InputRequiredResult`, … | +| Server | `McpServer`, `StreamableHTTPServerTransport`, `WebStandardStreamableHTTPServerTransport`, `StdioServerTransport` | +| Client (`@frontmcp/protocol/client`) | `Client`, `StreamableHTTPClientTransport`, `SSEClientTransport`, `StdioClientTransport` | +| Other | `InMemoryTransport`, `Transport`, `RequestHandlerExtra`, `AuthInfo` | The browser build swaps in browser versions of the server and Streamable HTTP modules through the package's `imports` map. The stdio transports need Node.js: in a browser or worker build they throw when constructed. diff --git a/libs/protocol/package.json b/libs/protocol/package.json index 7e28eac4f..e8e628e12 100644 --- a/libs/protocol/package.json +++ b/libs/protocol/package.json @@ -82,6 +82,17 @@ "types": "./dist/index.d.ts", "default": "./dist/esm/index.mjs" } + }, + "./client": { + "development": "./src/clients.ts", + "require": { + "types": "./dist/clients.d.ts", + "default": "./dist/clients.js" + }, + "import": { + "types": "./dist/clients.d.ts", + "default": "./dist/esm/clients.mjs" + } } }, "devDependencies": { diff --git a/libs/protocol/project.json b/libs/protocol/project.json index 10852f839..883e40942 100644 --- a/libs/protocol/project.json +++ b/libs/protocol/project.json @@ -31,7 +31,8 @@ "libs/protocol/src/browser-stdio-server.ts", "libs/protocol/src/client.ts", "libs/protocol/src/lazy-client.ts", - "libs/protocol/src/lazy-mcp-streamable-http.ts" + "libs/protocol/src/lazy-mcp-streamable-http.ts", + "libs/protocol/src/clients.ts" ], "assets": ["libs/protocol/README.md", "libs/protocol/CHANGELOG.md", "LICENSE", "libs/protocol/package.json"], "esbuildOptions": { @@ -79,7 +80,8 @@ "libs/protocol/src/browser-stdio-server.ts", "libs/protocol/src/client.ts", "libs/protocol/src/lazy-client.ts", - "libs/protocol/src/lazy-mcp-streamable-http.ts" + "libs/protocol/src/lazy-mcp-streamable-http.ts", + "libs/protocol/src/clients.ts" ], "esbuildOptions": { "minifyWhitespace": true, diff --git a/libs/protocol/src/__tests__/exports.spec.ts b/libs/protocol/src/__tests__/exports.spec.ts index e96697502..b8ccdc67d 100644 --- a/libs/protocol/src/__tests__/exports.spec.ts +++ b/libs/protocol/src/__tests__/exports.spec.ts @@ -12,6 +12,7 @@ import * as browserStreamableHttp from '../browser-mcp-streamable-http'; import * as browserServerTypes from '../browser-server-types'; import { StdioClientTransport as BrowserStdioClientTransport } from '../browser-stdio-client'; import { StdioServerTransport as BrowserStdioServerTransport } from '../browser-stdio-server'; +import * as clients from '../clients'; import { InMemoryTransport } from '../in-memory'; import * as protocol from '../index'; import { Server as NodeServer } from '../node-mcp-server'; @@ -38,8 +39,13 @@ describe('@frontmcp/protocol exports', () => { expect(protocol.LATEST_PROTOCOL_VERSION).toBe(LATEST_PROTOCOL_VERSION); expect(protocol.PROTOCOL_2026_07_28).toBe('2026-07-28'); expect(protocol.StdioServerTransport).toBe(SdkStdioServerTransport); - expect(typeof protocol.Client).toBe('function'); - expect(typeof protocol.StreamableHTTPClientTransport).toBe('function'); + }); + + it('serves the MCP client and its transports from the client subpath, not the root', () => { + for (const name of ['Client', 'StreamableHTTPClientTransport', 'SSEClientTransport', 'StdioClientTransport']) { + expect(typeof (clients as Record)[name]).toBe('function'); + expect(name in protocol).toBe(false); + } }); it('gives browsers stand-ins that say what is not available', () => { diff --git a/libs/protocol/src/clients.ts b/libs/protocol/src/clients.ts new file mode 100644 index 000000000..9ec7376c5 --- /dev/null +++ b/libs/protocol/src/clients.ts @@ -0,0 +1,2 @@ +// `@frontmcp/protocol/client`: the MCP client and its transports, kept out of the root that every server and server bundle loads. +export * from '#client'; diff --git a/libs/protocol/src/index.ts b/libs/protocol/src/index.ts index 47ab626a6..821280807 100644 --- a/libs/protocol/src/index.ts +++ b/libs/protocol/src/index.ts @@ -19,9 +19,6 @@ export * from './auth-types'; // Shared protocol types (Transport, RequestHandlerExtra) export * from './shared'; -// MCP Client -export * from '#client'; - // Stdio transport export * from './stdio'; diff --git a/libs/sdk/project.json b/libs/sdk/project.json index f9f0db1f8..2f6e4c2a8 100644 --- a/libs/sdk/project.json +++ b/libs/sdk/project.json @@ -45,6 +45,7 @@ "@frontmcp/auth", "@frontmcp/guard", "@frontmcp/protocol", + "@frontmcp/protocol/*", "@frontmcp/observability", "@opentelemetry/api", "@opentelemetry/sdk-trace-base", @@ -89,6 +90,7 @@ "@frontmcp/auth", "@frontmcp/guard", "@frontmcp/protocol", + "@frontmcp/protocol/*", "@frontmcp/observability", "@opentelemetry/api", "@opentelemetry/sdk-trace-base", @@ -133,6 +135,7 @@ "@frontmcp/auth", "@frontmcp/guard", "@frontmcp/protocol", + "@frontmcp/protocol/*", "@frontmcp/observability", "@opentelemetry/api", "@opentelemetry/sdk-trace-base", diff --git a/libs/sdk/src/agent/__tests__/agent-context-wiring.spec.ts b/libs/sdk/src/agent/__tests__/agent-context-wiring.spec.ts index 8d921d557..d0e7b5e97 100644 --- a/libs/sdk/src/agent/__tests__/agent-context-wiring.spec.ts +++ b/libs/sdk/src/agent/__tests__/agent-context-wiring.spec.ts @@ -2,12 +2,12 @@ import 'reflect-metadata'; import { z } from '@frontmcp/lazy-zod'; import { - Client, LoggingMessageNotificationSchema, MCP_20260728_META, type CallToolResult, type Progress, } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { createTestFetchServer, diff --git a/libs/sdk/src/agent/__tests__/agent-streaming.spec.ts b/libs/sdk/src/agent/__tests__/agent-streaming.spec.ts index d43a71234..77c37e5ad 100644 --- a/libs/sdk/src/agent/__tests__/agent-streaming.spec.ts +++ b/libs/sdk/src/agent/__tests__/agent-streaming.spec.ts @@ -7,7 +7,8 @@ import 'reflect-metadata'; import { z } from '@frontmcp/lazy-zod'; -import { Client, type CallToolResult, type Progress } from '@frontmcp/protocol'; +import { type CallToolResult, type Progress } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { createTestFetchServer, diff --git a/libs/sdk/src/direct/__tests__/connect.spec.ts b/libs/sdk/src/direct/__tests__/connect.spec.ts index b2f01c38a..870033586 100644 --- a/libs/sdk/src/direct/__tests__/connect.spec.ts +++ b/libs/sdk/src/direct/__tests__/connect.spec.ts @@ -89,8 +89,8 @@ const mockMcpClient = { getPrompt: jest.fn().mockResolvedValue({ messages: [] }), }; -jest.mock('@frontmcp/protocol', () => ({ - ...jest.requireActual('@frontmcp/protocol'), +jest.mock('@frontmcp/protocol/client', () => ({ + ...jest.requireActual('@frontmcp/protocol/client'), Client: jest.fn().mockImplementation(() => mockMcpClient), })); @@ -120,7 +120,7 @@ describe('connect utilities', () => { it('should use default clientInfo when not provided', async () => { const { connect } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); await connect(config); @@ -133,7 +133,7 @@ describe('connect utilities', () => { it('should pass custom clientInfo to MCP client', async () => { const { connect } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); await connect(config, { @@ -242,7 +242,7 @@ describe('connect utilities', () => { it('should pass capabilities to MCP client', async () => { const { connect } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); // Note: ClientCapabilities uses 'roots', not 'tools' (tools is a ServerCapability) @@ -262,7 +262,7 @@ describe('connect utilities', () => { describe('connectOpenAI', () => { it('should use OpenAI client info', async () => { const { connectOpenAI } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); await connectOpenAI(config); @@ -295,7 +295,7 @@ describe('connect utilities', () => { describe('connectClaude', () => { it('should use Claude client info', async () => { const { connectClaude } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); await connectClaude(config); @@ -307,7 +307,7 @@ describe('connect utilities', () => { describe('connectLangChain', () => { it('should use LangChain client info', async () => { const { connectLangChain } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); await connectLangChain(config); @@ -319,7 +319,7 @@ describe('connect utilities', () => { describe('connectVercelAI', () => { it('should use Vercel AI client info', async () => { const { connectVercelAI } = await import('../connect'); - const { Client } = await import('@frontmcp/protocol'); + const { Client } = await import('@frontmcp/protocol/client'); const config = createTestConfig(); await connectVercelAI(config); diff --git a/libs/sdk/src/direct/__tests__/direct-client.spec.ts b/libs/sdk/src/direct/__tests__/direct-client.spec.ts index 0753ccea4..debe6cdca 100644 --- a/libs/sdk/src/direct/__tests__/direct-client.spec.ts +++ b/libs/sdk/src/direct/__tests__/direct-client.spec.ts @@ -79,14 +79,14 @@ const mockMcpClient = { // MockClient defined inside the mock factory to avoid hoisting issues // (jest.mock is hoisted, but accessing outer variables before they're defined causes errors) -jest.mock('@frontmcp/protocol', () => ({ - ...jest.requireActual('@frontmcp/protocol'), +jest.mock('@frontmcp/protocol/client', () => ({ + ...jest.requireActual('@frontmcp/protocol/client'), Client: jest.fn().mockImplementation(() => mockMcpClient), })); // Import the mocked Client to use in tests for assertions -const { Client: MockClient } = require('@frontmcp/protocol'); +const { Client: MockClient } = require('@frontmcp/protocol/client'); describe('DirectClientImpl', () => { // Minimal mock scope diff --git a/libs/sdk/src/direct/direct-client.ts b/libs/sdk/src/direct/direct-client.ts index e2d50d643..c96058fcc 100644 --- a/libs/sdk/src/direct/direct-client.ts +++ b/libs/sdk/src/direct/direct-client.ts @@ -5,7 +5,6 @@ */ import { - Client, ElicitRequestSchema, ResourceUpdatedNotificationSchema, type CallToolResult, @@ -20,6 +19,7 @@ import { type ReadResourceResult, type ServerCapabilities, } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { fileExists, pathResolve, randomUUID } from '@frontmcp/utils'; import { listAllPages } from '../common/utils/list-all-pages.utils'; diff --git a/libs/sdk/src/remote-mcp/mcp-client.service.ts b/libs/sdk/src/remote-mcp/mcp-client.service.ts index f83208562..b105e0164 100644 --- a/libs/sdk/src/remote-mcp/mcp-client.service.ts +++ b/libs/sdk/src/remote-mcp/mcp-client.service.ts @@ -5,9 +5,6 @@ import { decodeJwtPayloadSafe } from '@frontmcp/auth'; import { - Client, - SSEClientTransport, - StreamableHTTPClientTransport, type AuthInfo, type CallToolResult, type GetPromptResult, @@ -18,6 +15,7 @@ import { type Tool, type Transport, } from '@frontmcp/protocol'; +import { Client, SSEClientTransport, StreamableHTTPClientTransport } from '@frontmcp/protocol/client'; import { type FrontMcpLogger } from '../common'; import { listAllPages } from '../common/utils/list-all-pages.utils'; diff --git a/libs/sdk/src/remote-mcp/mcp-client.types.ts b/libs/sdk/src/remote-mcp/mcp-client.types.ts index 6b0565193..96b659849 100644 --- a/libs/sdk/src/remote-mcp/mcp-client.types.ts +++ b/libs/sdk/src/remote-mcp/mcp-client.types.ts @@ -6,7 +6,6 @@ import { type AuthInfo, type CallToolResult, - type Client, type GetPromptResult, type Prompt, type ReadResourceResult, @@ -16,6 +15,7 @@ import { type Tool, type Transport, } from '@frontmcp/protocol'; +import { type Client } from '@frontmcp/protocol/client'; // ═══════════════════════════════════════════════════════════════════ // CONNECTION TYPES diff --git a/libs/sdk/src/skill/__tests__/skill-filter.flow.spec.ts b/libs/sdk/src/skill/__tests__/skill-filter.flow.spec.ts index cee6c5e47..fd773431f 100644 --- a/libs/sdk/src/skill/__tests__/skill-filter.flow.spec.ts +++ b/libs/sdk/src/skill/__tests__/skill-filter.flow.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; -import { Client, InMemoryTransport, type ReadResourceResult } from '@frontmcp/protocol'; +import { InMemoryTransport, type ReadResourceResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { createTestFetchServer, diff --git a/libs/sdk/src/transport/__tests__/in-memory-server.initialize.spec.ts b/libs/sdk/src/transport/__tests__/in-memory-server.initialize.spec.ts index 84debf9c1..1d0c463bd 100644 --- a/libs/sdk/src/transport/__tests__/in-memory-server.initialize.spec.ts +++ b/libs/sdk/src/transport/__tests__/in-memory-server.initialize.spec.ts @@ -4,7 +4,7 @@ */ import 'reflect-metadata'; -import { Client } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, LogLevel, Tool, ToolContext } from '../../common'; import { FrontMcpInstance } from '../../front-mcp/front-mcp'; diff --git a/libs/sdk/src/transport/in-memory-server.ts b/libs/sdk/src/transport/in-memory-server.ts index 1521b37e5..d17231a4a 100644 --- a/libs/sdk/src/transport/in-memory-server.ts +++ b/libs/sdk/src/transport/in-memory-server.ts @@ -63,7 +63,7 @@ export interface InMemoryServerResult { * * @example * ```typescript - * import { Client } from '@frontmcp/protocol'; + * import { Client } from '@frontmcp/protocol/client'; * import { FrontMcpInstance, createInMemoryServer } from '@frontmcp/sdk'; * * // Create a FrontMCP instance diff --git a/libs/sdk/src/transport/index.ts b/libs/sdk/src/transport/index.ts index cf8340a48..32b67c112 100644 --- a/libs/sdk/src/transport/index.ts +++ b/libs/sdk/src/transport/index.ts @@ -54,7 +54,7 @@ export type { * @example * ```typescript * import { createInMemoryServer } from '@frontmcp/sdk'; - * import { Client } from '@frontmcp/protocol'; + * import { Client } from '@frontmcp/protocol/client'; * * const { clientTransport, setAuthInfo, close } = await createInMemoryServer(scope, { * authInfo: { token: 'jwt-token' } diff --git a/libs/sdk/tsconfig.lib.json b/libs/sdk/tsconfig.lib.json index 82a4f58dd..3cb053d9f 100644 --- a/libs/sdk/tsconfig.lib.json +++ b/libs/sdk/tsconfig.lib.json @@ -21,7 +21,8 @@ "@frontmcp/ui/*": ["libs/ui/dist/*/index.d.ts"], "@frontmcp/auth": ["libs/auth/dist/index.d.ts"], "@frontmcp/guard": ["libs/guard/dist/index.d.ts"], - "@frontmcp/protocol": ["libs/protocol/dist/index.d.ts"] + "@frontmcp/protocol": ["libs/protocol/dist/index.d.ts"], + "@frontmcp/protocol/client": ["libs/protocol/dist/clients.d.ts"] } }, "include": ["src/**/*.ts"], diff --git a/libs/testing/src/raw-client/index.ts b/libs/testing/src/raw-client/index.ts index 0e9122cae..f8b85c0fb 100644 --- a/libs/testing/src/raw-client/index.ts +++ b/libs/testing/src/raw-client/index.ts @@ -2,6 +2,6 @@ * Raw MCP protocol client re-exports for low-level e2e testing. * For programmatic access, prefer connect()/connectOpenAI() from @frontmcp/sdk. */ -export { Client as McpClient } from '@frontmcp/protocol'; -export { StdioClientTransport as McpStdioClientTransport } from '@frontmcp/protocol'; +export { Client as McpClient } from '@frontmcp/protocol/client'; +export { StdioClientTransport as McpStdioClientTransport } from '@frontmcp/protocol/client'; export { isTcpPortListening } from './port-probe'; diff --git a/libs/testing/tsconfig.lib.json b/libs/testing/tsconfig.lib.json index fd587c86c..7bbf56e1a 100644 --- a/libs/testing/tsconfig.lib.json +++ b/libs/testing/tsconfig.lib.json @@ -13,7 +13,8 @@ "@frontmcp/sdk/*": ["libs/sdk/dist/*/index.d.ts"], "@frontmcp/ui": ["libs/ui/dist/index.d.ts"], "@frontmcp/ui/*": ["libs/ui/dist/*/index.d.ts"], - "@frontmcp/protocol": ["libs/protocol/dist/index.d.ts"] + "@frontmcp/protocol": ["libs/protocol/dist/index.d.ts"], + "@frontmcp/protocol/client": ["libs/protocol/dist/clients.d.ts"] } }, "include": ["src/**/*.ts"], diff --git a/plugins/plugin-approval/src/__tests__/approval.refusal-result.spec.ts b/plugins/plugin-approval/src/__tests__/approval.refusal-result.spec.ts index ccb6d4460..3598858d2 100644 --- a/plugins/plugin-approval/src/__tests__/approval.refusal-result.spec.ts +++ b/plugins/plugin-approval/src/__tests__/approval.refusal-result.spec.ts @@ -7,7 +7,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, FrontMcpInstance, LogLevel, Tool, ToolContext } from '@frontmcp/sdk'; import { ApprovalPlugin } from '../index'; diff --git a/plugins/plugin-codecall/src/__tests__/codecall-access-control.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-access-control.flow.spec.ts index ca1011862..60c42d38c 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-access-control.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-access-control.flow.spec.ts @@ -8,7 +8,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { Adapter, App, diff --git a/plugins/plugin-codecall/src/__tests__/codecall-direct-call.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-direct-call.flow.spec.ts index 84e2414f2..37ef8e369 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-direct-call.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-direct-call.flow.spec.ts @@ -11,7 +11,8 @@ import 'reflect-metadata'; import { z } from '@frontmcp/lazy-zod'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, FrontMcpInstance, LogLevel, Tool, ToolContext } from '@frontmcp/sdk'; import CodeCallPlugin from '../codecall.plugin'; diff --git a/plugins/plugin-codecall/src/__tests__/codecall-execute-hardening.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-execute-hardening.flow.spec.ts index 6587c0602..87579fdc1 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-execute-hardening.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-execute-hardening.flow.spec.ts @@ -11,7 +11,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, FrontMcpInstance, LogLevel, Tool, ToolContext } from '@frontmcp/sdk'; import CodeCallPlugin from '../codecall.plugin'; diff --git a/plugins/plugin-codecall/src/__tests__/codecall-execute-results.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-execute-results.flow.spec.ts index 20f4a4ce0..e2c23b71f 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-execute-results.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-execute-results.flow.spec.ts @@ -9,7 +9,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, diff --git a/plugins/plugin-codecall/src/__tests__/codecall-invoke-output-schema.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-invoke-output-schema.flow.spec.ts index 8bfb31c8e..89bd43802 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-invoke-output-schema.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-invoke-output-schema.flow.spec.ts @@ -1,7 +1,8 @@ import 'reflect-metadata'; import { z } from '@frontmcp/lazy-zod'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, FrontMcpInstance, LogLevel, Tool, ToolContext } from '@frontmcp/sdk'; import CodeCallPlugin from '../codecall.plugin'; diff --git a/plugins/plugin-codecall/src/__tests__/codecall-options.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-options.flow.spec.ts index 7436f8785..10847caa5 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-options.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-options.flow.spec.ts @@ -5,7 +5,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, FrontMcpInstance, LogLevel, Tool, ToolContext } from '@frontmcp/sdk'; import CodeCallPlugin from '../codecall.plugin'; diff --git a/plugins/plugin-codecall/src/__tests__/codecall-skill-filter.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-skill-filter.flow.spec.ts index c9106a6d4..56dab815a 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-skill-filter.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-skill-filter.flow.spec.ts @@ -6,7 +6,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, diff --git a/plugins/plugin-codecall/src/__tests__/codecall-surface.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/codecall-surface.flow.spec.ts index 3ddff9bcd..ac9a156bb 100644 --- a/plugins/plugin-codecall/src/__tests__/codecall-surface.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/codecall-surface.flow.spec.ts @@ -8,7 +8,8 @@ */ import 'reflect-metadata'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, diff --git a/plugins/plugin-codecall/src/__tests__/script-error-codes.flow.spec.ts b/plugins/plugin-codecall/src/__tests__/script-error-codes.flow.spec.ts index 235fb5819..839837868 100644 --- a/plugins/plugin-codecall/src/__tests__/script-error-codes.flow.spec.ts +++ b/plugins/plugin-codecall/src/__tests__/script-error-codes.flow.spec.ts @@ -6,7 +6,8 @@ import 'reflect-metadata'; import { z } from '@frontmcp/lazy-zod'; -import { Client, type CallToolResult } from '@frontmcp/protocol'; +import { type CallToolResult } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { App, createInMemoryServer, diff --git a/plugins/plugin-skilled-openapi/src/__tests__/skills-surface-before-load.spec.ts b/plugins/plugin-skilled-openapi/src/__tests__/skills-surface-before-load.spec.ts index ab37c2719..7390793bc 100644 --- a/plugins/plugin-skilled-openapi/src/__tests__/skills-surface-before-load.spec.ts +++ b/plugins/plugin-skilled-openapi/src/__tests__/skills-surface-before-load.spec.ts @@ -13,7 +13,7 @@ */ import 'reflect-metadata'; -import { Client } from '@frontmcp/protocol'; +import { Client } from '@frontmcp/protocol/client'; import { createInMemoryServer, FrontMcpInstance, LogLevel, z } from '@frontmcp/sdk'; import { SkilledOpenApiPlugin } from '../index'; diff --git a/plugins/plugin-skilled-openapi/tsconfig.spec.json b/plugins/plugin-skilled-openapi/tsconfig.spec.json index d1e6fab0d..951d7c7bb 100644 --- a/plugins/plugin-skilled-openapi/tsconfig.spec.json +++ b/plugins/plugin-skilled-openapi/tsconfig.spec.json @@ -11,6 +11,7 @@ "@frontmcp/lazy-zod": ["libs/lazy-zod/dist/index.d.ts"], "@frontmcp/sdk": ["libs/sdk/dist/index.d.ts"], "@frontmcp/protocol": ["libs/protocol/dist/index.d.ts"], + "@frontmcp/protocol/client": ["libs/protocol/dist/clients.d.ts"], "@frontmcp/adapters/openapi": ["libs/adapters/dist/openapi/index.d.ts"], "@frontmcp/auth": ["libs/auth/dist/index.d.ts"], "@frontmcp/utils": ["libs/utils/dist/index.d.ts"] diff --git a/tsconfig.base.json b/tsconfig.base.json index b6eaaf5d7..4a0b90c56 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -87,6 +87,7 @@ "@frontmcp/ui/universal": ["libs/ui/src/universal/index.ts"], "@frontmcp/ui/bundler": ["libs/ui/src/bundler/index.ts"], "@frontmcp/protocol": ["libs/protocol/src/index.ts"], + "@frontmcp/protocol/client": ["libs/protocol/src/clients.ts"], "@frontmcp/auth": ["libs/auth/src/index.ts"], "@frontmcp/guard": ["libs/guard/src/index.ts"], "@frontmcp/observability": ["libs/observability/src/index.ts"],