Merge pull request #133 from kalvinnchau/client-instruction-support

feat: add mcp client instruction support
This commit is contained in:
Justin Spahr-Summers 2025-01-23 11:48:25 +00:00 • committed by GitHub
commit 99fe1932d7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 0 deletions

View file

@ -36,6 +36,7 @@ test("should initialize with matching protocol version", async () => {
name: "test",
version: "1.0",
},
instructions: "test instructions",
},
});
}
@ -66,6 +67,9 @@ test("should initialize with matching protocol version", async () => {
}),
}),
);
// Should have the instructions returned
expect(client.getInstructions()).toEqual("test instructions");
});
test("should initialize with supported older protocol version", async () => {
@ -111,6 +115,9 @@ test("should initialize with supported older protocol version", async () => {
name: "test",
version: "1.0",
});
// Expect no instructions
expect(client.getInstructions()).toBeUndefined();
});
test("should reject unsupported protocol version", async () => {

View file

@ -85,6 +85,7 @@ export class Client<
private _serverCapabilities?: ServerCapabilities;
private _serverVersion?: Implementation;
private _capabilities: ClientCapabilities;
private _instructions?: string;
/**
* Initializes this client with the given name and version information.
@ -152,6 +153,8 @@ export class Client<
this._serverCapabilities = result.capabilities;
this._serverVersion = result.serverInfo;
this._instructions = result.instructions;
await this.notification({
method: "notifications/initialized",
});
@ -176,6 +179,13 @@ export class Client<
return this._serverVersion;
}
/**
* After initialization has completed, this may be populated with information about the server's instructions.
*/
getInstructions(): string | undefined {
return this._instructions;
}
protected assertCapabilityForMethod(method: RequestT["method"]): void {
switch (method as ClientRequest["method"]) {
case "logging/setLevel":

View file

@ -304,6 +304,12 @@ export const InitializeResultSchema = ResultSchema.extend({
protocolVersion: z.string(),
capabilities: ServerCapabilitiesSchema,
serverInfo: ImplementationSchema,
/**
* Instructions describing how to use the server and its features.
*
* This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a "hint" to the model. For example, this information MAY be added to the system prompt.
*/
instructions: z.optional(z.string()),
});
/**