Compare commits

...

15 Commits

Author SHA1 Message Date
Claude
cad2569360 Add mcp-context-warning plugin to warn about high MCP context usage
This plugin warns users when their MCP servers are consuming significant
context (>20k tokens). Many users don't realize MCP servers take up context
space, which can lead to unexpectedly fast context exhaustion.

The plugin:
- Runs a SessionStart hook to check MCP configurations
- Estimates token usage based on server and tool counts
- Shows a warning with server breakdown if estimated usage > 20k tokens
- Provides guidance on how to disable unused MCP servers

Slack thread: https://anthropic.slack.com/archives/C07VBSHV7EV/p1765989316572149
2025-12-17 16:44:01 +00:00
GitHub Actions
4392352687 chore: Update CHANGELOG.md 2025-12-16 22:06:07 +00:00
kashyap murali
c27c6f4e4a Merge pull request #14071 from anthropics/claude/slack-make-no-comment-default-Qqha8
Make no-comment the default for /code-review
2025-12-16 12:22:18 -08:00
GitHub Actions
0dde1fef97 chore: Update CHANGELOG.md 2025-12-15 23:49:39 +00:00
Claude
e4f682030b Make no-comment the default for /code-review
Change the default behavior of /code-review to output to the terminal
instead of posting a PR comment. Users can use the --comment flag to
explicitly post the review as a PR comment when desired.

This is more suitable for local development workflows where posting
comments to the PR is not always needed.
2025-12-15 17:50:32 +00:00
GitHub Actions
eb87245010 chore: Update CHANGELOG.md 2025-12-13 00:59:55 +00:00
GitHub Actions
3680637065 chore: Update CHANGELOG.md 2025-12-12 23:31:50 +00:00
GitHub Actions
2192c86c20 chore: Update CHANGELOG.md 2025-12-12 01:29:45 +00:00
kashyap murali
dfd3494132 Merge pull request #13739 from anthropics/claude/slack-session-01GzKi42xM3SphuxeQ4De88U
Remove footer from code-review plugin output
2025-12-11 14:42:30 -08:00
Claude
e8cca9a7af Remove footer from code-review plugin output
Remove the "Generated with Claude Code" footer and feedback CTA
from the code review comment template as it adds noise without
providing value after the first viewing.
2025-12-11 22:40:32 +00:00
GitHub Actions
6358669884 chore: Update CHANGELOG.md 2025-12-11 19:07:31 +00:00
GitHub Actions
ace0a82778 chore: Update CHANGELOG.md 2025-12-11 04:39:56 +00:00
GitHub Actions
e095e1270a chore: Update CHANGELOG.md 2025-12-10 08:18:47 +00:00
GitHub Actions
69da5e8269 chore: Update CHANGELOG.md 2025-12-10 02:27:37 +00:00
GitHub Actions
7069a25987 chore: Update CHANGELOG.md 2025-12-09 02:08:28 +00:00
7 changed files with 311 additions and 14 deletions

View File

@@ -102,6 +102,17 @@
"source": "./plugins/learning-output-style",
"category": "learning"
},
{
"name": "mcp-context-warning",
"description": "Warns users when MCP servers are consuming significant context (>20k tokens), helping prevent unexpected context exhaustion",
"version": "1.0.0",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
},
"source": "./plugins/mcp-context-warning",
"category": "productivity"
},
{
"name": "plugin-dev",
"description": "Comprehensive toolkit for developing Claude Code plugins. Includes 7 expert skills covering hooks, MCP integration, commands, agents, and best practices. AI-assisted plugin creation and validation.",

View File

@@ -1,5 +1,94 @@
# Changelog
## 2.0.71
- Added /config toggle to enable/disable prompt suggestions
- Added `/settings` as an alias for the `/config` command
- Fixed @ file reference suggestions incorrectly triggering when cursor is in the middle of a path
- Fixed MCP servers from `.mcp.json` not loading when using `--dangerously-skip-permissions`
- Fixed permission rules incorrectly rejecting valid bash commands containing shell glob patterns (e.g., `ls *.txt`, `for f in *.png`)
- Bedrock: Environment variable `ANTHROPIC_BEDROCK_BASE_URL` is now respected for token counting and inference profile listing
- New syntax highlighting engine for native build
## 2.0.70
- Added Enter key to accept and submit prompt suggestions immediately (tab still accepts for editing)
- Added wildcard syntax `mcp__server__*` for MCP tool permissions to allow or deny all tools from a server
- Added auto-update toggle for plugin marketplaces, allowing per-marketplace control over automatic updates
- Added `plan_mode_required` spawn parameter for teammates to require plan approval before implementing changes
- Added `current_usage` field to status line input, enabling accurate context window percentage calculations
- Fixed input being cleared when processing queued commands while the user was typing
- Fixed prompt suggestions replacing typed input when pressing Tab
- Fixed diff view not updating when terminal is resized
- Improved memory usage by 3x for large conversations
- Improved resolution of stats screenshots copied to clipboard (Ctrl+S) for crisper images
- Removed # shortcut for quick memory entry (tell Claude to edit your CLAUDE.md instead)
- Fix thinking mode toggle in /config not persisting correctly
- Improve UI for file creation permission dialog
## 2.0.69
- Minor bugfixes
## 2.0.68
- Fixed IME (Input Method Editor) support for languages like Chinese, Japanese, and Korean by correctly positioning the composition window at the cursor
- Fixed a bug where disallowed MCP tools were visible to the model
- Fixed an issue where steering messages could be lost while a subagent is working
- Fixed Option+Arrow word navigation treating entire CJK (Chinese, Japanese, Korean) text sequences as a single word instead of navigating by word boundaries
- Improved plan mode exit UX: show simplified yes/no dialog when exiting with empty or missing plan instead of throwing an error
- Add support for enterprise managed settings. Contact your Anthropic account team to enable this feature.
## 2.0.67
- Thinking mode is now enabled by default for Opus 4.5
- Thinking mode configuration has moved to /config
- Added search functionality to `/permissions` command with `/` keyboard shortcut for filtering rules by tool name
- Show reason why autoupdater is disabled in `/doctor`
- Fixed false "Another process is currently updating Claude" error when running `claude update` while another instance is already on the latest version
- Fixed MCP servers from `.mcp.json` being stuck in pending state when running in non-interactive mode (`-p` flag or piped input)
- Fixed scroll position resetting after deleting a permission rule in `/permissions`
- Fixed word deletion (opt+delete) and word navigation (opt+arrow) not working correctly with non-Latin text such as Cyrillic, Greek, Arabic, Hebrew, Thai, and Chinese
- Fixed `claude install --force` not bypassing stale lock files
- Fixed consecutive @~/ file references in CLAUDE.md being incorrectly parsed due to markdown strikethrough interference
- Windows: Fixed plugin MCP servers failing due to colons in log directory paths
## 2.0.65
- Added ability to switch models while writing a prompt using alt+p (linux, windows), option+p (macos).
- Added context window information to status line input
- Added `fileSuggestion` setting for custom `@` file search commands
- Added `CLAUDE_CODE_SHELL` environment variable to override automatic shell detection (useful when login shell differs from actual working shell)
- Fixed prompt not being saved to history when aborting a query with Escape
- Fixed Read tool image handling to identify format from bytes instead of file extension
## 2.0.64
- Made auto-compacting instant
- Agents and bash commands can run asynchronously and send messages to wake up the main agent
- /stats now provides users with interesting CC stats, such as favorite model, usage graph, usage streak
- Added named session support: use `/rename` to name sessions, `/resume <name>` in REPL or `claude --resume <name>` from the terminal to resume them
- Added support for .claude/rules/`. See https://code.claude.com/docs/en/memory for details.
- Added image dimension metadata when images are resized, enabling accurate coordinate mappings for large images
- Fixed auto-loading .env when using native installer
- Fixed `--system-prompt` being ignored when using `--continue` or `--resume` flags
- Improved `/resume` screen with grouped forked sessions and keyboard shortcuts for preview (P) and rename (R)
- VSCode: Added copy-to-clipboard button on code blocks and bash tool inputs
- VSCode: Fixed extension not working on Windows ARM64 by falling back to x64 binary via emulation
- Bedrock: Improve efficiency of token counting
- Bedrock: Add support for `aws login` AWS Management Console credentials
- Unshipped AgentOutputTool and BashOutputTool, in favor of a new unified TaskOutputTool
## 2.0.62
- Added "(Recommended)" indicator for multiple-choice questions, with the recommended option moved to the top of the list
- Added `attribution` setting to customize commit and PR bylines (deprecates `includeCoAuthoredBy`)
- Fixed duplicate slash commands appearing when ~/.claude is symlinked to a project directory
- Fixed slash command selection not working when multiple commands share the same name
- Fixed an issue where skill files inside symlinked skill directories could become circular symlinks
- Fixed running versions getting removed because lock file incorrectly going stale
- Fixed IDE diff tab not closing when rejecting file changes
## 2.0.61
- Reverted VSCode support for multiple terminal clients due to responsiveness issues.

View File

@@ -22,23 +22,29 @@ Performs automated code review on a pull request using multiple specialized agen
- **Agent #4**: Analyze git blame/history for context-based issues
5. Scores each issue 0-100 for confidence level
6. Filters out issues below 80 confidence threshold
7. Posts review comment with high-confidence issues only
7. Outputs review (to terminal by default, or as PR comment with `--comment` flag)
**Usage:**
```bash
/code-review
/code-review [--comment]
```
**Options:**
- `--comment`: Post the review as a comment on the pull request (default: outputs to terminal only)
**Example workflow:**
```bash
# On a PR branch, run:
# On a PR branch, run locally (outputs to terminal):
/code-review
# Post review as PR comment:
/code-review --comment
# Claude will:
# - Launch 4 review agents in parallel
# - Score each issue for confidence
# - Post comment with issues ≥80 confidence
# - Skip posting if no high-confidence issues found
# - Output issues ≥80 confidence (to terminal or PR depending on flag)
# - Skip if no high-confidence issues found
```
**Features:**
@@ -114,17 +120,23 @@ This plugin is included in the Claude Code repository. The command is automatica
### Standard PR review workflow:
```bash
# Create PR with changes
# Run local review (outputs to terminal)
/code-review
# Review the automated feedback
# Make any necessary fixes
# Optionally post as PR comment
/code-review --comment
# Merge when ready
```
### As part of CI/CD:
```bash
# Trigger on PR creation or update
# Automatically posts review comments
# Use --comment flag to post review comments
/code-review --comment
# Skip if review already exists
```

View File

@@ -52,7 +52,9 @@ Note: Still review Claude generated PR's.
6. Filter out any issues that were not validated in step 5. This step will give us our list of high signal issues for our review.
7. Finally, comment on the pull request.
7. Finally, output the review.
- If the `--comment` argument is provided, post the review as a comment on the pull request using `gh pr comment`
- Otherwise (default), output the review directly to the terminal for local viewing
When writing your comment, follow these guidelines:
a. Keep your output brief
b. Avoid emojis
@@ -93,11 +95,6 @@ Found 3 issues:
<link to file and line with full sha1 + line range for context>
🤖 Generated with [Claude Code](https://claude.ai/code)
<sub>- If this code review was useful, please react with 👍. Otherwise, react with 👎.</sub>
---
- Or, if you found no issues:
@@ -108,8 +105,6 @@ Found 3 issues:
No issues found. Checked for bugs and CLAUDE.md compliance.
🤖 Generated with [Claude Code](https://claude.ai/code)
---
- When linking to code, follow the following format precisely, otherwise the Markdown preview won't render correctly: https://github.com/anthropics/claude-code/blob/c21d3c10bc8e898b7ac1a2d745bdc9bc4e423afe/package.json#L10-L15

View File

@@ -0,0 +1,9 @@
{
"name": "mcp-context-warning",
"version": "1.0.0",
"description": "Warns users when MCP servers are consuming significant context (>20k tokens), helping prevent unexpected context exhaustion",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
}
}

View File

@@ -0,0 +1,164 @@
#!/usr/bin/env python3
"""
MCP Context Warning Hook for Claude Code
This hook runs at session start and warns users when their MCP servers
are consuming significant context (>20k tokens). This helps users understand
why they might be burning through context quickly.
"""
import json
import os
import sys
from pathlib import Path
# Threshold in tokens for showing a warning
TOKEN_WARNING_THRESHOLD = 20000
# Estimated tokens per MCP tool (based on real-world data:
# Asana: ~836/tool, Gmail: ~833/tool, Google Calendar: ~1867/tool, Google Drive: ~1260/tool)
# Using 1000 as a conservative average
TOKENS_PER_TOOL_ESTIMATE = 1000
# Base overhead per MCP server (connection info, auth, etc.)
BASE_TOKENS_PER_SERVER = 500
def find_mcp_configs(cwd: str) -> list[tuple[str, dict]]:
"""
Find all MCP configuration files that might be loaded.
Returns list of (path, config) tuples.
"""
configs = []
# Check project-level .mcp.json
project_mcp = Path(cwd) / ".mcp.json"
if project_mcp.exists():
try:
with open(project_mcp) as f:
configs.append((str(project_mcp), json.load(f)))
except (json.JSONDecodeError, IOError):
pass
# Check user-level MCP config (~/.claude/.mcp.json)
user_mcp = Path.home() / ".claude" / ".mcp.json"
if user_mcp.exists():
try:
with open(user_mcp) as f:
configs.append((str(user_mcp), json.load(f)))
except (json.JSONDecodeError, IOError):
pass
return configs
def count_servers_and_estimate_tools(configs: list[tuple[str, dict]]) -> tuple[dict, int]:
"""
Count MCP servers and estimate their tool counts.
Returns (server_info dict, total_estimated_tokens).
"""
server_info = {}
for path, config in configs:
# MCP config format: {"mcpServers": {"server-name": {...}}}
mcp_servers = config.get("mcpServers", {})
for server_name, server_config in mcp_servers.items():
if server_name in server_info:
continue # Skip duplicates
# Try to get tool count from config if available
# Otherwise use a default estimate
tool_count = server_config.get("toolCount", 10) # Default 10 tools
server_info[server_name] = {
"source": path,
"estimated_tools": tool_count,
}
# Calculate total estimated tokens
total_tokens = 0
for server_name, info in server_info.items():
server_tokens = BASE_TOKENS_PER_SERVER + (info["estimated_tools"] * TOKENS_PER_TOOL_ESTIMATE)
info["estimated_tokens"] = server_tokens
total_tokens += server_tokens
return server_info, total_tokens
def format_warning_message(server_info: dict, total_tokens: int) -> str:
"""Format a warning message about MCP context usage."""
# Build server breakdown table
lines = [
f"Your MCP servers are using an estimated ~{total_tokens:,} tokens of context.",
"",
"Server breakdown:",
]
# Sort servers by token usage (highest first)
sorted_servers = sorted(
server_info.items(),
key=lambda x: x[1]["estimated_tokens"],
reverse=True
)
for server_name, info in sorted_servers:
tokens = info["estimated_tokens"]
tools = info["estimated_tools"]
lines.append(f" - {server_name}: ~{tokens:,} tokens ({tools} tools)")
lines.extend([
"",
"Consider disabling MCP servers you're not actively using to conserve context.",
"You can manage MCP servers with `/mcp disable <server-name>` or by editing .mcp.json.",
])
return "\n".join(lines)
def main():
"""Main hook function."""
# Read input from stdin
try:
raw_input = sys.stdin.read()
input_data = json.loads(raw_input) if raw_input.strip() else {}
except json.JSONDecodeError:
# If we can't parse input, exit silently
sys.exit(0)
# Get current working directory from hook input or environment
cwd = input_data.get("cwd", os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd()))
# Find MCP configurations
configs = find_mcp_configs(cwd)
if not configs:
# No MCP configs found, nothing to warn about
sys.exit(0)
# Count servers and estimate tokens
server_info, total_tokens = count_servers_and_estimate_tools(configs)
if not server_info:
# No servers configured
sys.exit(0)
# Check if we're over the warning threshold
if total_tokens >= TOKEN_WARNING_THRESHOLD:
warning_message = format_warning_message(server_info, total_tokens)
# Output JSON with systemMessage for Claude to see
output = {
"continue": True,
"systemMessage": warning_message
}
print(json.dumps(output))
sys.exit(0)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,17 @@
{
"description": "Warns users when MCP servers consume significant context (>20k tokens)",
"hooks": {
"SessionStart": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/check_mcp_context.py",
"timeout": 10
}
]
}
]
}
}