Skip to content

Commit 7ef8b56

Browse files
committed
Add server.removeTool('name')
1 parent d5dba54 commit 7ef8b56

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

src/server/mcp.test.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1961,6 +1961,60 @@ describe.each(zodTestMatrix)('$zodVersionLabel', (entry: ZodMatrixEntry) => {
19611961
// Clean up spies
19621962
warnSpy.mockRestore();
19631963
});
1964+
1965+
/***
1966+
* Test: Tool self removal
1967+
*/
1968+
test("should remove tool when using tool.remove()", async () => {
1969+
const mcpServer = new McpServer({
1970+
name: "test server",
1971+
version: "1.0",
1972+
});
1973+
1974+
// Register initial tool
1975+
const tool = mcpServer.tool("test", async () => ({
1976+
content: [
1977+
{
1978+
type: "text",
1979+
text: "Test response",
1980+
},
1981+
],
1982+
}));
1983+
1984+
expect(mcpServer['_registeredTools']['test']).toBeDefined();
1985+
1986+
// Now delete the tool
1987+
tool.remove();
1988+
1989+
expect(mcpServer['_registeredTools']['test']).toBeUndefined();
1990+
});
1991+
1992+
/***
1993+
* Test: Tool server removal
1994+
*/
1995+
test("should remove tool when using server.removeTool(...)", async () => {
1996+
const mcpServer = new McpServer({
1997+
name: "test server",
1998+
version: "1.0",
1999+
});
2000+
2001+
// Register initial tool
2002+
mcpServer.tool("test", async () => ({
2003+
content: [
2004+
{
2005+
type: "text",
2006+
text: "Test response",
2007+
},
2008+
],
2009+
}));
2010+
2011+
expect(mcpServer['_registeredTools']['test']).toBeDefined();
2012+
2013+
// Now delete the tool
2014+
mcpServer.removeTool("test");
2015+
2016+
expect(mcpServer['_registeredTools']['test']).toBeUndefined();
2017+
});
19642018
});
19652019

19662020
describe('resource()', () => {

src/server/mcp.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,17 @@ export class McpServer {
10611061
);
10621062
}
10631063

1064+
/**
1065+
* Removes a tool from the server by name.
1066+
* Does nothing if the tool is not registered.
1067+
*/
1068+
removeTool(name: string) {
1069+
const tool = this._registeredTools[name];
1070+
if (tool) {
1071+
tool.update({ name: null });
1072+
}
1073+
};
1074+
10641075
/**
10651076
* Registers a zero-argument prompt `name`, which will run the given function when the client calls it.
10661077
* @deprecated Use `registerPrompt` instead.

0 commit comments

Comments
 (0)