Skip to main content
Glama
README.md
# TOON MCP Server

[![npm version](https://badge.fury.io/js/toon-mcp-server.svg)](https://www.npmjs.com/package/toon-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

MCP (Model Context Protocol) server for **TOON (Token-Oriented Object Notation)** encoding. Reduce LLM token usage by **50-70%** when sending structured data.

## What is TOON?

TOON is a compact data format optimized for LLM input. Instead of repeating field names for every object, it uses a header-based format:

**JSON (1041 tokens):**
```json
[
  {"id": 1, "name": "Product A", "price": 99.99},
  {"id": 2, "name": "Product B", "price": 149.99}
]
```

**TOON (389 tokens):**
```
[id,name,price]
1,Product A,99.99
2,Product B,149.99
```

**Result: 62% fewer tokens = 62% cost savings**

## Installation

### Quick Start (npx - no install needed)

Add to your MCP settings:

**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
  "mcpServers": {
    "toon": {
      "command": "npx",
      "args": ["-y", "toon-mcp-server"]
    }
  }
}
```

**Claude Code** (`~/.claude/settings.json`):
```json
{
  "mcpServers": {
    "toon": {
      "command": "npx",
      "args": ["-y", "toon-mcp-server"]
    }
  }
}
```

### Global Install

```bash
npm install -g toon-mcp-server
```

Then add to your MCP settings:
```json
{
  "mcpServers": {
    "toon": {
      "command": "toon-mcp"
    }
  }
}
```

### As Claude Code Skill

```bash
# Download the skill
curl -o ~/.claude/skills/toon.md https://raw.githubusercontent.com/elminson/toon-mcp/main/skills/toon.md
```

Then use `/toon` in Claude Code.

## Available Tools

### `toon_encode`
Convert data to TOON format.

**Supported formats:** JSON, CSV, TSV, XML, HTML tables, YAML

```
Input: [{"name":"Alice","age":30},{"name":"Bob","age":25}]
Output: [name,age]
        Alice,30
        Bob,25
```

### `toon_decode`
Convert TOON back to JSON.

### `toon_analyze`
Analyze data and show potential token/cost savings.

### `toon_optimize_prompt`
Find data sections in a prompt and convert them to TOON automatically.

## Usage Examples

### In Claude Desktop/Code (with MCP)

Just ask Claude to use the tools:
- "Encode this JSON to TOON: [...]"
- "Analyze how much I'd save converting this data to TOON"
- "Optimize this prompt for token efficiency"

### Programmatic (Node.js)

```javascript
const { ToonEncoder } = require('toon-mcp-server/src/toon-encoder');

// Encode
const data = [
  { id: 1, name: 'Test', price: 99.99 },
  { id: 2, name: 'Test 2', price: 149.99 },
];
const toon = ToonEncoder.encode(data);

// Get stats
const json = JSON.stringify(data);
const stats = ToonEncoder.getStats(json, toon);
console.log(stats.savings.percent); // "64.5%"

// Decode
const decoded = ToonEncoder.decode(toon);
```

## Benchmarks

Tested with OpenAI GPT-4o-mini:

| Dataset Size | JSON Tokens | TOON Tokens | Savings |
|--------------|-------------|-------------|---------|
| 5 items | 383 | 192 | 49.9% |
| 20 items | 1,394 | 530 | 62% |
| 50 items | 3,412 | 1,204 | 64.7% |
| 100 items | 6,800 | 2,400 | ~65% |

## Cost Savings at Scale

| Volume | GPT-4o-mini | GPT-4o | Claude Sonnet |
|--------|-------------|--------|---------------|
| 1M requests | $489 saved | $8,158 saved | $9,789 saved |
| 10M requests | $4,890 saved | $81,580 saved | $97,890 saved |

## When to Use TOON

✅ **Best for:**
- Arrays of objects with same structure (tables, lists, records)
- API responses, database results
- Large datasets sent to LLMs
- Cost optimization at scale

⚠️ **Less effective for:**
- Deeply nested, non-uniform data
- Small payloads (<5 items)
- Data with many unique field structures

## Contributing

Pull requests welcome! Please open an issue first to discuss changes.

## License

MIT

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct and non-overlapping purpose: toon_analyze assesses potential savings, toon_encode converts data to TOON format, toon_decode reverts TOON to original formats, and toon_optimize_prompt specifically handles prompt optimization. There is no ambiguity in tool selection.

Naming Consistency5/5

All tools follow a consistent 'toon_' prefix with a clear verb_noun pattern (e.g., toon_analyze, toon_encode, toon_decode, toon_optimize_prompt). This uniformity makes the tool set predictable and easy to understand.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose of TOON encoding and optimization. Each tool serves a specific function in the data processing workflow, and there are no extraneous or missing tools for this focused domain.

Completeness4/5

The tool set covers the core TOON workflow comprehensively: analyze, encode, decode, and optimize prompts. A minor gap might be the lack of a tool for batch processing or handling specific edge cases, but the existing tools allow agents to perform essential operations without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues