Skip to main content
Glama
aparajithn

agent-utils-mcp

by aparajithn
README.md
# Agent Utils MCP Server πŸ› οΈ

A Swiss-army-knife utility server for AI agents β€” 18 tools via MCP (Streamable HTTP) + REST API.

[![Smithery](https://smithery.ai/badge/@aparajithn/agent-utils-mcp)](https://smithery.ai/server/@aparajithn/agent-utils-mcp)
[![Glama](https://glama.ai/badge/mcp/agent-utils-mcp)](https://glama.ai/mcp/servers/agent-utils-mcp)

**Live at:** https://agent-utils-mcp.onrender.com

## Add to Your MCP Client

### Claude Desktop / Cursor / Windsurf

Add to your MCP config:

```json
{
  "mcpServers": {
    "agent-utils": {
      "url": "https://agent-utils-mcp.onrender.com/mcp"
    }
  }
}
```

### Smithery

```bash
smithery mcp add aparajithn/agent-utils
```

## Tools (18)

| Tool | Description |
|------|-------------|
| `tool_json_validate` | Validate JSON string, return parsed or error |
| `tool_json_format` | Pretty-print or minify JSON |
| `tool_base64_encode` | Encode string to base64 |
| `tool_base64_decode` | Decode base64 string |
| `tool_hash_generate` | MD5, SHA256, SHA512 hash |
| `tool_uuid_generate` | UUID v4 or v7 |
| `tool_url_parse` | Parse URL into components |
| `tool_regex_test` | Test regex pattern, return matches |
| `tool_markdown_to_html` | Markdown β†’ HTML |
| `tool_html_to_markdown` | HTML β†’ Markdown |
| `tool_text_stats` | Word count, char count, reading time |
| `tool_slug_generate` | URL-safe slug from text |
| `tool_datetime_convert` | Convert between timezones/formats/Unix timestamps |
| `tool_cron_parse` | Human-readable cron description + next N runs |
| `tool_diff_text` | Unified diff between two texts |
| `tool_csv_to_json` | CSV β†’ JSON array |
| `tool_json_to_csv` | JSON array β†’ CSV |
| `tool_jwt_decode` | Decode JWT payload (no verification) |

## REST API

All tools also available as REST endpoints at `/api/v1/{tool_name}`.

```bash
# Hash a string
curl -X POST https://agent-utils-mcp.onrender.com/api/v1/hash_generate \
  -H "Content-Type: application/json" \
  -d '{"text": "hello world", "algorithm": "sha256"}'

# Generate UUID
curl -X POST https://agent-utils-mcp.onrender.com/api/v1/uuid_generate \
  -H "Content-Type: application/json" \
  -d '{"version": 4}'

# Convert datetime
curl -X POST https://agent-utils-mcp.onrender.com/api/v1/datetime_convert \
  -H "Content-Type: application/json" \
  -d '{"dt_string": "2025-01-01 12:00", "from_tz": "UTC", "to_tz": "America/New_York"}'
```

OpenAPI docs: https://agent-utils-mcp.onrender.com/docs

## Discovery

- **Google A2A:** `/.well-known/agent-card.json`
- **Smithery:** `/.well-known/mcp/server-card.json`
- **OpenAPI:** `/openapi.json`

## Pricing

- **Free tier:** 100 requests per IP per 24 hours
- **Paid tier:** x402 protocol β€” $0.001/request in USDC (Base network)

### Paying with x402

When you exhaust the free tier, the server replies with HTTP 402 carrying
machine-readable payment requirements (x402 v1). Any x402-aware client pays
and retries automatically:

```python
from x402_fetch import x402_fetch  # pip install x402-fetch
response = x402_fetch("https://agent-utils-mcp.onrender.com/api/v1/hash_generate", method="POST",
                      body={"text": "hello", "algorithm": "sha256"})
```

Or attach the payment header yourself: the `X-Payment` header must be a
base64-encoded JSON envelope containing an EIP-3009 `TransferWithAuthorization`
(USDC on Base) signed with the payer's EIP-712 key for the exact price,
addressed to the server's wallet, with an unused nonce. Payments are verified
cryptographically (signature recovery + amount/recipient/deadline/replay
checks) before the request is served.

### Payment configuration (environment variables)

| Variable | Default | Purpose |
|----------|---------|---------|
| `X402_WALLET_ADDRESS` | *(unset β€” paywall disabled)* | Wallet that receives payments |
| `X402_PRICE_MICROUSD` | `1000` ($0.001) | Price per request in USDC atomic units |
| `X402_NETWORK` / `X402_CHAIN_ID` / `X402_USDC_CONTRACT` | `base` / `8453` / Base USDC | Payment network |
| `X402_MAX_TIMEOUT_SECONDS` | `60` | Payment validity window |
| `RATE_LIMIT_FREE` | `100` | Free requests per IP per 24h |

### Collecting revenue (on-chain settlement)

With `X402_SETTLER_PRIVATE_KEY` set, every verified payment is executed
on-chain within seconds: the EIP-3009 `transferWithAuthorization` is submitted
to the USDC contract on Base and the USDC moves from the payer to
`X402_WALLET_ADDRESS`. The settler key does **not** need to be the receiving
wallet's key β€” EIP-3009 authorizations can be executed by any address, so a
dedicated gas-only burner key can do the submitting while the funds land in
your main wallet. It only needs a small ETH balance on Base for gas.

| Variable | Default | Purpose |
|----------|---------|---------|
| `X402_SETTLER_PRIVATE_KEY` | *(unset β€” verify only, no funds move)* | Key that submits settlement transactions |
| `X402_RPC_URL` | `https://mainnet.base.org` | Base JSON-RPC endpoint |
| `X402_SETTLE_MIN_MICROUSD` | `0` (settle each payment immediately) | Batch payments until pending value reaches this |

Failed settlements are retried with exponential backoff; if all retries fail,
the full payment authorization is written to the logs (CRITICAL) so it can be
redeemed manually β€” no payment is silently lost.

## Tech Stack

- Python 3.11 + FastAPI + MCP SDK (Streamable HTTP)
- Deployed on Render (auto-scaling)
- GitHub: https://github.com/aparajithn/agent-utils-mcp

## License

MIT

TDQS

A3.5/5.0

Scored across 18 tools

Disambiguation5/5

Each tool performs a distinct operation, with clear separation between encoding/decoding, validation/formatting, conversion pairs, and parsing utilities. No overlapping responsibilities would confuse an agent.

Naming Consistency4/5

Names follow a consistent lowercase snake_case pattern with a uniform 'tool_' prefix and typically include the target data type, but verb placement varies (e.g., tool_text_stats vs tool_json_validate) and conversion pairs use 'to' rather than a strict verb_noun scheme.

Tool Count4/5

18 tools is slightly above the typical well-scoped range, but the broad utility-toolkit purpose justifies the number since each tool addresses a distinct text, data, or time operation.

Completeness4/5

The set covers a wide range of common agent utilities (JSON, base64, hashing, UUID, datetime, CSV, Markdown, diff). Minor gaps such as URL encoding/decoding or more advanced string operations are missing, but the surface is generally complete for its stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues