How to Remove Tools in Claude: App and API Guide
"Removing tools in Claude" means two different things depending on where you're working. If you're a Claude.ai user, it usually means disconnecting an integration, connector, or MCP server that's cluttering your chat or that you no longer trust with access to your data. If you're a developer, it means removing a tool definition from an API request so Claude stops calling a function you no longer want it to use.
This guide covers both, starting with the simpler case (the Claude.ai interface) and moving into the API side, where "removing" a tool is really about controlling what gets sent in the tools array of a request.
Removing Tools and Connectors in Claude.ai
If you added a connector (Google Drive, GitHub, Slack, a custom MCP server, etc.) and want to take it away, you don't need to touch any code — it's a settings change.
- Open Claude.ai and go to Settings.
- Click Connectors (sometimes labeled Integrations depending on your account type).
- Find the tool or connector you want to remove.
- Click Disconnect or Remove, and confirm.
For desktop-app MCP servers configured through a local config file (common on Claude Desktop), removal is done by editing the config directly:
- Open your Claude Desktop configuration file (typically
claude_desktop_config.json). - Find the entry under
mcpServersfor the tool you want gone. - Delete that JSON block entirely.
- Save the file and restart Claude Desktop.
{
"mcpServers": {
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem"] }
}
}
Deleting the "filesystem" key (and its contents) removes that tool from every future conversation until you re-add it.
If you're on a Team or Enterprise plan, some connectors are managed at the workspace level. In that case an individual user can't remove them — an admin has to disable the connector from the organization's admin console.
Removing Tools From API Requests
If you're building on top of Claude's API rather than using the chat interface, "removing a tool" is a request-shape problem, not a settings problem. Tool use works by sending a tools array with each API call — Claude has no memory of tools between requests, so the fastest way to remove a tool is simply to not include it next time.
{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"tools": [
{ "name": "get_weather", "description": "...", "input_schema": { ... } }
],
"messages": [ { "role": "user", "content": "What's the weather in Paris?" } ]
}
To remove the search_web tool from this conversation, just leave it out of the array on the next call:
{
"tools": [
{ "name": "get_weather", "description": "...", "input_schema": { ... } }
]
}
There's no separate "unregister tool" endpoint because tools aren't stored server-side per conversation — you own the array, so you control exactly what Claude can call at each turn.
Temporarily disabling tools without deleting them
If you want to keep a tool's definition in your codebase but stop Claude from using it for a specific request, you have two options:
- Filter the array conditionally — build the
toolslist dynamically based on context (user permissions, feature flags, conversation state) instead of hardcoding it. - Use
tool_choice: "none"— this tells Claude not to call any tools at all for that turn, even if tools are present in the request. Useful when you want a plain text answer without editing your tool list.
{
"tools": [ { "name": "get_weather", "...": "..." } ],
"tool_choice": { "type": "none" }
}
This is the cleanest way to "remove" tool access for a single turn while keeping your tool definitions intact for later use.
Building conditional tool sets
For real applications, tools usually need to come and go based on user role, subscription tier, or app state. A common pattern:
function getToolsForUser(user) {
const tools = [baseSearchTool];
if (user.plan === "pro") tools.push(advancedAnalyticsTool);
if (user.role === "admin") tools.push(deleteRecordTool);
return tools;
}
If you're routing Claude access through an API layer like SubToAPI, this filtering happens in your own backend before the request ever hits /v1/messages — SubToAPI just proxies the call with your application key (sub_live_...), so removing a tool is still just a matter of what you include in the request body. See /docs/tools for the exact request shape and /docs/messages for the base endpoint. If you're new to sending tool-use requests at all, /docs/quickstart walks through your first authenticated call.
Removing Tools in Claude Code
If you're working in Claude Code (the CLI) and want to stop it from using a specific built-in tool (like file editing or bash execution) in a session, that's controlled through permission settings rather than the tools array — check your project's .claude configuration or session flags for tool-specific allow/deny lists. This is separate from the API's tools array and applies only to CLI sessions.
Quick Checklist
- Claude.ai connector → Settings → Connectors → Disconnect
- Desktop MCP server → edit
claude_desktop_config.json, remove the entry, restart - Workspace-managed connector → ask an admin to disable it
- API tool for one turn → use
tool_choice: "none" - API tool permanently → stop including it in the
toolsarray - Conditional/role-based tools → filter the array in your own backend before the request
FAQs
Does removing a tool delete data it already created? No. Removing a tool or connector only stops future access — files, records, or messages a tool previously created or modified stay wherever they were stored.
Can I remove a tool mid-conversation in the API? Yes. Since tools are sent fresh with every request, simply omit the tool from the tools array on your next message and Claude will no longer have access to it, even within the same conversation history.
Why does Claude still try to call a tool I removed? Check for cached request-building code or a hardcoded tools array elsewhere in your app — if the same tool definition is still being sent on a later call, Claude will still see it as available.