diff --git a/README.md b/README.md index 76c45ab9..6843fa7d 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ npm install @modelcontextprotocol/sdk ```typescript import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { + ListResourcesRequestSchema, + ReadResourceRequestSchema, +} from "@modelcontextprotocol/sdk/types.js"; const transport = new StdioClientTransport({ command: "path/to/server", @@ -61,6 +65,10 @@ const resourceContent = await client.request( ```typescript import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { + ListResourcesRequestSchema, + ReadResourceRequestSchema, +} from "@modelcontextprotocol/sdk/types.js"; const server = new Server({ name: "example-server", diff --git a/src/client/sse.ts b/src/client/sse.ts index e7f0dc6b..0e6e7eb9 100644 --- a/src/client/sse.ts +++ b/src/client/sse.ts @@ -12,13 +12,17 @@ export class SSEClientTransport implements Transport { private _endpoint?: URL; private _abortController?: AbortController; private _url: URL; + private _eventSourceInit?: EventSourceInit; + private _requestInit?: RequestInit; onclose?: () => void; onerror?: (error: Error) => void; onmessage?: (message: JSONRPCMessage) => void; - constructor(url: URL) { + constructor(url: URL, opts?: { eventSourceInit?: EventSourceInit, requestInit?: RequestInit }) { this._url = url; + this._eventSourceInit = opts?.eventSourceInit; + this._requestInit = opts?.requestInit; } start(): Promise { @@ -29,7 +33,7 @@ export class SSEClientTransport implements Transport { } return new Promise((resolve, reject) => { - this._eventSource = new EventSource(this._url.href); + this._eventSource = new EventSource(this._url.href, this._eventSourceInit); this._abortController = new AbortController(); this._eventSource.onerror = (event) => { @@ -90,14 +94,17 @@ export class SSEClientTransport implements Transport { } try { - const response = await fetch(this._endpoint, { + const headers = new Headers(this._requestInit?.headers); + headers.set("content-type", "application/json"); + const init = { + ...this._requestInit, method: "POST", - headers: { - "Content-Type": "application/json", - }, + headers, body: JSON.stringify(message), - signal: this._abortController?.signal, - }); + signal: this._abortController?.signal + }; + + const response = await fetch(this._endpoint, init); if (!response.ok) { const text = await response.text().catch(() => null);