Fetch JSONPath MCP
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.
🎯 Why Use This?
Reduce LLM Token Usage & Hallucination - Instead of fetching entire JSON responses and wasting tokens, extract only the data you need.
Traditional Fetch vs JSONPath Extract
❌ 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.
Installation
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.
Windsurf Local Server Connection
{
"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"]
}
}
}
Development Setup
1. Install Dependencies
# Installs the project plus dev tools (pytest, ruff) and demo server deps
uv sync
2. Start Demo Server (Optional)
# Start demo server on port 8080
uv run demo/demo_server.py
3. Run MCP Server
uv run fetch-jsonpath-mcp
Demo Server Data
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"}
}
Available Tools
fetch-json
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-text
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"
batch-fetch-json
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
batch-fetch-text
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
JSONPath Examples
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.
🚀 Performance Benefits
- 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
Configuration
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.
Development
# Run tests
uv run pytest
# Check code quality
uv run ruff check --fix
# Build and test locally
uv build
Releasing
Releases are published to PyPI via Trusted Publishing — no API tokens. Bump version in pyproject.toml, then push a matching tag:
git tag v1.2.0 && git push origin v1.2.0
.github/workflows/release.yml verifies the tag matches the project version, runs lint and tests, builds the distributions, publishes to PyPI, and creates a GitHub release with the artifacts attached.
What's New in v1.1.0
- ✨ 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
Metadata
Release files for fetch-jsonpath-mcp 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fetch_jsonpath_mcp-1.2.0.tar.gz | 88.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fetch_jsonpath_mcp-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 102.0 kB
Release files / fetch_jsonpath_mcp-1.2.0.tar.gz
| Download URL | fetch_jsonpath_mcp-1.2.0.tar.gz |
|---|---|
| Size | 88.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ac6f3f3cbc10b3a0c8d0ba415fdb67747629d45b6fbc11b5aac6a1b6900b35af
|
|
BLAKE2b-256 checksum How to use checksums |
f32b22eae4d9b4ad1cff1bf4b314765b988c2c67dae4e78e3ea575aec1c56f59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / fetch_jsonpath_mcp-1.2.0-py3-none-any.whl
| Download URL | fetch_jsonpath_mcp-1.2.0-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3039425f0be0b2de01504cf8d3a0cf5f24f7d63e4ef3a20177a7d918869c3f27
|
|
BLAKE2b-256 checksum How to use checksums |
0b88bb332943ed72bab6e808c9f9b31efac5699097d45c250f2fbc2c1a9144a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log