A Model Context Protocol (MCP) server that provides tools for fetching JSON data and web content from URLs. Features intelligent content extraction, multiple HTTP methods, and browser-like headers for reliable web scraping.
Reduce LLM Token Usage & Hallucination - Instead of fetching entire JSON responses and wasting tokens, extract only the data you need.
โ Traditional fetch (wasteful):
// API returns 2000+ tokens
{
"data": [
{
"id": 1,
"name": "Alice",
"email": "alice@example.com",
"avatar": "https://...",
"profile": {
"bio": "Long bio text...",
"settings": {...},
"preferences": {...},
"metadata": {...}
},
"posts": [...],
"followers": [...],
"created_at": "2023-01-01",
"updated_at": "2024-01-01"
},
// ... 50 more users
],
"pagination": {...},
"meta": {...}
}
โ JSONPath extract (efficient):
// Only 10 tokens - exactly what you need!
["Alice", "Bob", "Charlie"]
Using pattern: data[*].name
saves 99% tokens and eliminates model hallucination from irrelevant data.
For most IDEs, use the uvx
tool to run the server.
{
"mcpServers": {
"fetch-jsonpath-mcp": {
"command": "uvx",
"args": [
"fetch-jsonpath-mcp"
]
}
}
}
Install in Claude Code
claude mcp add fetch-jsonpath-mcp -- uvx fetch-jsonpath-mcp
Install in Cursor
{
"mcpServers": {
"fetch-jsonpath-mcp": {
"command": "uvx",
"args": ["fetch-jsonpath-mcp"]
}
}
}
Install in Windsurf
Add this to your Windsurf MCP config file. See Windsurf MCP docs for more info.
{
"mcpServers": {
"fetch-jsonpath-mcp": {
"command": "uvx",
"args": ["fetch-jsonpath-mcp"]
}
}
}
Install in VS Code
"mcp": {
"servers": {
"fetch-jsonpath-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["fetch-jsonpath-mcp"]
}
}
}
uv sync
# Install demo server dependencies
uv add fastapi uvicorn
# Start demo server on port 8080
uv run demo-server
uv run fetch-jsonpath-mcp
The demo server at http://localhost:8080
returns:
{
"foo": [{"baz": 1, "qux": "a"}, {"baz": 2, "qux": "b"}],
"bar": {
"items": [10, 20, 30],
"config": {"enabled": true, "name": "example"}
},
"metadata": {"version": "1.0.0"}
}
Extract JSON data using JSONPath patterns with support for all HTTP methods.
{
"name": "fetch-json",
"arguments": {
"url": "http://localhost:8080",
"pattern": "foo[*].baz",
"method": "GET"
}
}
Returns: [1, 2]
Parameters:
url
(required): Target URLpattern
(optional): JSONPath pattern for data extractionmethod
(optional): HTTP method (GET, POST, PUT, DELETE, etc.) - Default: "GET"data
(optional): Request body for POST/PUT requestsheaders
(optional): Additional HTTP headers
Fetch web content with intelligent text extraction. Defaults to Markdown format for better readability.
{
"name": "fetch-text",
"arguments": {
"url": "http://localhost:8080",
"output_format": "clean_text"
}
}
Returns: Clean text representation of the JSON data
Output Formats:
"markdown"
(default): Converts HTML to clean Markdown format"clean_text"
: Pure text with HTML tags removed"raw_html"
: Original HTML content
Parameters:
url
(required): Target URLmethod
(optional): HTTP method - Default: "GET"data
(optional): Request body for POST/PUT requestsheaders
(optional): Additional HTTP headersoutput_format
(optional): Output format - Default: "markdown"
Process multiple URLs with different JSONPath patterns concurrently.
{
"name": "batch-fetch-json",
"arguments": {
"requests": [
{"url": "http://localhost:8080", "pattern": "foo[*].baz"},
{"url": "http://localhost:8080", "pattern": "bar.items[*]"}
]
}
}
Returns: [{"url": "http://localhost:8080", "pattern": "foo[*].baz", "success": true, "content": [1, 2]}, {"url": "http://localhost:8080", "pattern": "bar.items[*]", "success": true, "content": [10, 20, 30]}]
Request Object Parameters:
url
(required): Target URLpattern
(optional): JSONPath patternmethod
(optional): HTTP method - Default: "GET"data
(optional): Request bodyheaders
(optional): Additional HTTP headers
Fetch content from multiple URLs with intelligent text extraction.
{
"name": "batch-fetch-text",
"arguments": {
"requests": [
"http://localhost:8080",
{"url": "http://localhost:8080", "output_format": "raw_html"}
],
"output_format": "markdown"
}
}
Returns: [{"url": "http://localhost:8080", "success": true, "content": "# Demo Server Data\n\n..."}, {"url": "http://localhost:8080", "success": true, "content": "{\"foo\": [{\"baz\": 1, \"qux\": \"a\"}, {\"baz\": 2, \"qux\": \"b\"}]..."}]
Supports:
- Simple URL strings
- Full request objects with custom methods and headers
- Mixed input types in the same batch
This project uses jsonpath-ng for JSONPath implementation.
Pattern | Result | Description |
---|---|---|
foo[*].baz |
[1, 2] |
Get all baz values |
bar.items[*] |
[10, 20, 30] |
Get all items |
metadata.version |
["1.0.0"] |
Get version |
For complete JSONPath syntax reference, see the jsonpath-ng documentation.
- Token Efficiency: Extract only needed data, not entire JSON responses
- Faster Processing: Smaller payloads = faster LLM responses
- Reduced Hallucination: Less irrelevant data = more accurate outputs
- Cost Savings: Fewer tokens = lower API costs
- Better Focus: Clean data helps models stay on task
- Smart Headers: Default browser headers prevent blocking and improve access
- Markdown Conversion: Clean, readable format that preserves structure
Set environment variables to customize behavior:
# Request timeout in seconds (default: 10.0)
export JSONRPC_MCP_TIMEOUT=30
# SSL verification (default: true)
export JSONRPC_MCP_VERIFY=false
# Follow redirects (default: true)
export JSONRPC_MCP_FOLLOW_REDIRECTS=true
# Custom headers (will be merged with default browser headers)
export JSONRPC_MCP_HEADERS='{"Authorization": "Bearer token"}'
# HTTP proxy configuration
export JSONRPC_MCP_PROXY="http://proxy.example.com:8080"
Default Browser Headers: The server automatically includes realistic browser headers to prevent blocking:
- User-Agent: Chrome browser simulation
- Accept: Standard browser content types
- Accept-Language, Accept-Encoding: Browser defaults
- Security headers: Sec-Fetch-* headers for modern browsers
Custom headers in JSONRPC_MCP_HEADERS
will override defaults when there are conflicts.
# Run tests
pytest
# Check code quality
ruff check --fix
# Build and test locally
uv build
- โจ Multi-Method HTTP Support: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
- ๐ Tool Renaming:
get-json
โfetch-json
,get-text
โfetch-text
- ๐ Markdown Conversion: Default HTML to Markdown conversion with
markdownify
- ๐ Smart Browser Headers: Automatic browser simulation headers
- ๐๏ธ Format Control: Three output formats for text content (markdown, clean_text, raw_html)
- ๐ Enhanced Batch Processing: Support for different methods in batch operations