io.github.MukundaKatta/agentfit
Token-aware message truncation: fit a chat history into your model's context budget.
Open source Open in the app JSON README (API)
About
Token-aware message truncation: fit a chat history into your model's context budget.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- mukundakatta
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.1.0
- Stars
- 1
- Open pull requests
- 5
- Last push
- 2026-08-01T07:45:46Z
- Repository state
- ativo
- Language
- JavaScript
- License
- MIT
- Added
- 2026-08-29 03:02:07
- Updated
- 2026-08-29 03:02:07
- Origin id
io.github.MukundaKatta/agentfit
README
# agentfit-mcp
**MCP server for [`@mukundakatta/agentfit`](https://www.npmjs.com/package/@mukundakatta/agentfit).** Lets Claude Desktop, Cursor, Cline, Windsurf, Zed, or any other MCP client estimate token counts and fit a chat history into a model's context budget on demand.
```bash
npx -y @mukundakatta/agentfit-mcp
```
Three tools:
- **`count_tokens`** — estimate tokens in a string or chat-message array, with per-model estimator families (openai, anthropic, google, llama, default).
- **`fit_messages`** — drop messages from a chat history until under a `maxTokens` budget. Supports drop-oldest, drop-middle, and priority strategies; honors `preserveSystem`, `preserveFirstN`, `preserveLastN`.
- **`list_estimators`** — list the built-in estimator families.
## Add to your client
### Claude Desktop
Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"agentfit": {
"command": "npx",
"args": ["-y", "@mukundakatta/agentfit-mcp"]
}
}
}
```
### Cursor
`~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"agentfit": {
"command": "npx",
"args": ["-y", "@mukundakatta/agentfit-mcp"]
}
}
}
```
### Cline / Windsurf / Zed
Same shape as above. The server speaks plain MCP over stdio, so any client that supports stdio MCP servers will work.
## Tool examples
**`count_tokens`:**
```json
{ "input": "hello world", "model": "claude-sonnet-4-6" }
```
Returns:
```json
{ "tokens": 4, "model": "claude-sonnet-4-6" }
```
**`fit_messages`:**
```json
{
"messages": [
{ "role": "system", "content": "You are precise." },
{ "role": "user", "content": "long context..." },
{ "role": "assistant", "content": "..." },
{ "role": "user", "content": "final question" }
],
"maxTokens": 8000,
"model": "claude-sonnet-4-6",
"preserveSystem": true,
"preserveLastN": 2,
"strategy": "drop-oldest"
}
```
Returns:
```json
{
"messages": [...],
"dropped": [...],
"tokens": { "before": 12000, "after": 7800, "budget": 8000 },
"fit": true
}
```
`fit_messages` always returns a structured result and never throws across the wire: if the budget is unreachable even after dropping all non-protected messages, you get `fit: false` with the partial result so the caller can decide what to do.
## Why a separate MCP server
`@mukundakatta/agentfit` is a zero-dependency JavaScript library. This package wraps it as an MCP server so it's accessible from inside any MCP-aware AI assistant: ask Claude "how many tokens is this transcript?" or "trim this chat to 8k tokens preserving the system prompt and last 2 turns" and the assistant calls these tools directly.
## Sibling MCP servers
Part of the agent-stack series, all `@mukundakatta/*-mcp`:
- [`@mukundakatta/agentfit-mcp`](https://www.npmjs.com/package/@mukundakatta/agentfit-mcp) — *Fit it.* (this)
- [`@mukundakatta/agentguard-mcp`](https://www.npmjs.com/package/@mukundakatta/agentguard-mcp) — *Sandbox it.*
- [`@mukundakatta/agentsnap-mcp`](https://www.npmjs.com/package/@mukundakatta/agentsnap-mcp) — *Test it.*
- [`@mukundakatta/agentvet-mcp`](https://www.npmjs.com/package/@mukundakatta/agentvet-mcp) — *Vet it.*
- [`@mukundakatta/agentcast-mcp`](https://www.npmjs.com/package/@mukundakatta/agentcast-mcp) — *Validate it.*
## License
MIT