MCP Web Tools
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Web Toolsfetch this page as Markdown: https://example.com/article"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Web Tools helps ChatGPT read the sources behind its searches. Use ChatGPT's search to find a page, then let the plugin fetch its full text as Markdown. For live APIs, retrieve the JSON or inspect the exact HTTP response. This makes it easier to compare sources, read documentation, and check current data.
The project is free under the MIT license. It needs no paid search API or separate LLM API key, and can run within Cloudflare Workers' Free plan limits. Your ChatGPT account must support custom MCP plugins; its subscription and workspace requirements still apply. See Costs for the platform details.
You deploy and operate the servers. The maintainer provides source code and
operates no public or demo endpoints for this project. All endpoint URLs in
this documentation are placeholders. Replace <your-subdomain> with the
subdomain in the URL printed by your own deployment. No personal domains or
account identifiers are included in the deployment configuration.
Reading a paper with the web reader in ChatGPT. WebRead is the plugin's chosen
display name in this example.
Servers
Server | Tools | Use it for |
| Articles, documentation, Markdown, PDFs, and Office documents | |
| Live APIs, raw responses, headers, redirects, and small batches |
Deploy either server or both. Each has its own /mcp endpoint and a regular HTTP
API. Both fetch at call time with cache bypass requested. The reader selects
main content, removes page navigation, and returns long documents in parts.
URL discovery comes from ChatGPT's search or another search tool.
Related MCP server: Google Search Engine MCP Server
Deploy
Requirements
Node.js 22 or later and npm.
A Cloudflare account with Workers enabled. The Free plan is sufficient to get started.
Workers AI access for the web reader's HTML and document conversion. The
AIbinding is already configured; follow any account activation or terms prompts in the Cloudflare dashboard.
The default configuration uses Cloudflare's workers.dev subdomain. You can
complete deployment with that address, without buying a domain or setting up DNS.
Install and sign in
Run these commands from your own machine:
git clone https://github.com/ZhenHuangLab/mcp-web-tools.git
cd mcp-web-tools
npm ci
npx wrangler login
npx wrangler whoamiWrangler opens a browser for Cloudflare authorization. Check that whoami shows
the intended account. If you have several accounts, set CLOUDFLARE_ACCOUNT_ID
in your local shell to the account you want to use. For headless environments,
follow Wrangler's authentication guide
and supply credentials through local environment variables or a secret store.
Keep tokens out of chat messages, source files, and Git commits.
Review and deploy
Review the name in each server's wrangler.jsonc. Deploying a name that
already exists in your account updates that Worker; choose a different name
if needed. Keep the reader's AI binding enabled.
npm run check # Build both Workers without deploying
npm run deploy # Deploy the reader, then the HTTP toolsTo deploy only one:
npm run deploy:read
npm run deploy:curlWrangler prints the actual URLs. With the default Worker names, their MCP endpoints have this form:
https://webpage-fetcher.<your-subdomain>.workers.dev/mcp
https://public-curl-worker.<your-subdomain>.workers.dev/mcpIf this is your first Worker, complete the workers.dev subdomain setup when
Cloudflare asks. Changing a Worker name also changes its URL prefix.
The servers ship without inbound authentication. Anyone who can reach your Worker can call it and consume your account's quota. Review access controls, rate limits, and logs before sharing an endpoint. The HTTP tools can also send requests that change data on a destination service. See Security.
Check your deployment
Set these variables to the actual origins printed by Wrangler, with no trailing
/mcp. The values below are placeholders:
READ_ORIGIN='https://webpage-fetcher.<your-subdomain>.workers.dev'
CURL_ORIGIN='https://public-curl-worker.<your-subdomain>.workers.dev'
curl --fail-with-body "$READ_ORIGIN/"
curl --fail-with-body --get "$READ_ORIGIN/" \
--data-urlencode 'url=https://example.com'
curl --fail-with-body --get "$CURL_ORIGIN/api/json" \
--data-urlencode 'url=https://api.github.com/repos/cloudflare/workers-sdk'The first request describes the reader, the second returns Markdown, and the third returns a JSON API response. To check MCP tool discovery and calls:
npx @modelcontextprotocol/inspector@latestIn the Inspector, choose Streamable HTTP and connect to each deployed
/mcp URL. Confirm that the reader lists one tool and the HTTP server lists four,
then call the tools you plan to use.
Connect to ChatGPT as a plugin
Add your deployed MCP server as a custom ChatGPT plugin to improve the page reading stage of web searches. Start with the web reader; add the HTTP tools when you also need API access or raw responses.
Following OpenAI's custom MCP connection guide:
Open ChatGPT Plugins, select +, then Add custom MCP server.
Enter a name, such as
Web Reader, and a short description.Enter your reader's full HTTPS
/mcpURL under Connection. The server uses Streamable HTTP.Choose No authentication for this project's default configuration. Review the risk warning and select Create as a plugin.
Check the discovered tool, install the plugin, and start a new conversation. Type
@and select it when you want to use it.Repeat with the HTTP server's
/mcpURL if you need its four tools.
Account and workspace policies control access to custom plugins. If your account does not show this option, check OpenAI's current availability and your workspace settings. A server update that changes tool metadata also needs a Refresh in ChatGPT and a new conversation.
Try a prompt such as:
Search official sources for the topic below. Use fetch_webpage_to_markdown to
read the relevant pages in full, and continue with startIndex when a response
has more content. Compare the sources and cite their URLs in your answer.
Topic: What changed in the latest Cloudflare Workers release?For API data:
Use fetch_json to read https://api.github.com/repos/cloudflare/workers-sdk.
Report the current star count and the URL you fetched.Review any proposed write request before approving it. Other MCP clients can connect to the same endpoints using their Streamable HTTP connection settings.
WebRead and Curl are the display names used for the two plugins in this
user-provided example.
Deploy with an AI agent
Give this prompt to a coding agent with terminal access on your machine. It asks the agent to handle setup and deployment, while leaving Cloudflare login, account selection, and publication approval under your control.
Deploy https://github.com/ZhenHuangLab/mcp-web-tools to my own Cloudflare account.
1. Clone the repository into a new directory, or use my existing checkout after
checking its state. Read README.md, SECURITY.md, package.json, and both
wrangler.jsonc files before making changes. Use Node.js 22 or later.
2. Run npm ci and npm run check. Use the lockfile and configured dependency
versions. Keep the two Workers and their shared modules in the same checkout.
3. Run npx wrangler whoami. If login is needed, ask me to complete npx wrangler
login through Cloudflare. For a headless environment, ask me to configure
credentials locally. Never request, print, or commit a token in chat or files.
4. Confirm the target account and Worker names with me. Explain that these
endpoints are reachable over HTTPS and have no inbound authentication by
default. Explain the Free plan limits and the Workers AI binding. Ask for
approval before deploying or updating an existing Worker. Enable a paid
plan, buy a domain, or add other paid services only with my explicit approval.
5. Use workers.dev and preserve the reader's AI binding. Deploy both services
with npm run deploy after approval, or deploy only the one I choose. Deploy
to my account; every documented example endpoint is a placeholder.
6. Record the actual URLs from Wrangler. Verify each deployed service over HTTP,
read an HTML page through the reader, and check MCP tools/list and a harmless
tool call using a protocol version supported by shared/mcp.js. Inspect errors
before changing code. If access or account setup blocks a step, stop there
and tell me the exact action needed.
7. Return the actual HTTPS /mcp URLs, checks performed, any remaining errors,
and the steps to add each server at ChatGPT Plugins. Report only results
observed from my deployment.Costs
The project charges no subscription or usage fee and requires no external search service or LLM API key. The deployed code makes HTTP requests and uses Cloudflare's document conversion service, rather than calling a paid LLM API.
Cloudflare Workers Free has request and CPU limits. Most toMarkdown format
conversions are free according to Cloudflare; this project excludes image
conversion and OCR. Large or complex responses can exceed the Free plan's CPU
budget. Monitor usage and choose a paid plan only if your workload needs it.
See Workers limits
and Markdown conversion pricing
for the current terms. ChatGPT access follows your existing plan and workspace
policy; the project adds no plugin subscription.
Development
From the repository root, run one server per terminal:
npm run dev:read
npm run dev:curlWrangler prints each local URL. The reader's remote: true AI binding calls
Cloudflare even during local development and needs account access and a network
connection. HTML preparation uses Workers' native HTMLRewriter.
npm run check bundles both Workers without deployment or Cloudflare account
credentials. CI runs the same check. Deployment commands target only the named
Worker, so the services can be updated independently.
For a custom domain, add a routes entry in the relevant wrangler.jsonc using
a domain you control in Cloudflare. For example, reader.example.com is a
placeholder, not a project endpoint. See Cloudflare custom domains.
Limits and security
The reader works with public URLs, static HTML, and supported online documents. It does not run page JavaScript, sign in to sites, pass browser challenges, or read scanned text through OCR. Pagination fetches and converts the source again on each call, so changing pages can move between parts.
Requests pass through your Cloudflare account. HTML and document conversion also sends content to Workers AI. Both configurations enable Workers observability. Review Cloudflare's log settings and retention before handling sensitive URLs or credentials. Treat fetched text as untrusted data and review consequential actions separately from page content.
See the reader guide, HTTP tools guide, and security policy for limits and operational details. Contributions are welcome; see CONTRIBUTING.md.
License
MIT; see LICENSE. Dependencies retain their own licenses.
Acknowledgments
Thanks to the LINUX DO community for its support, shared knowledge, and feedback. Thanks also to Cloudflare for Workers and Markdown conversion, and to the MCP community for the protocol and tools.
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server (stdio): fetch web pages as clean readable markdown via the AgentForge API
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Cloudflare Workers-based implementation of Model Context Protocol (MCP) server with OAuth login that allows tools like Claude to access external capabilities.-
- FlicenseNot gradedqualityDmaintenanceEnables Google search queries and webpage content extraction through an MCP server deployed on Cloudflare Workers. Supports single and batch webpage content extraction with integrated OAuth authentication.1-
- AlicenseNot gradedqualityDmaintenanceExpose any API to an LLM agent as two sandboxed MCP tools (search + execute) on Cloudflare Workers.5 npm2MIT
- FlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI clients to extract live web content and convert it into structured Markdown for LLM ingestion, RAG pipelines, and agentic workflows.-