Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Build a small scraper as an MCP server that Codex can call: define a focused page-extraction tool, validate its URL and limits on the server, fetch only public pages, and inspect the server locally with MCP Inspector. “Web MCP” is ambiguous: the official OpenAI pages describe a documentation-only MCP service and general MCP servers, but do not identify a product named Web MCP or a built-in Codex web-scraping MCP. The tutorial below builds your own MCP server; it does not treat web search as scraping.
What you are building—and what “Web MCP” means
Model Context Protocol (MCP) lets an AI client discover and call tools exposed by a server. Here, Codex is the client; your server supplies a narrow tool that fetches a public web page and returns its title and readable text. OpenAI’s MCP guidance recommends tools that map to recognizable user actions and expose only the data and actions needed for them (OpenAI MCP server guide).
This is separate from OpenAI’s Docs MCP at https://developers.openai.com/mcp. That service searches and returns OpenAI documentation content; it is read-only and does not make API calls on your behalf. Codex can connect to it, but it is not your scraper and its setup command does not configure the server you build here.
Choose a narrow scraper operation
Start with one action: fetch a public HTML page and return its title, text, final URL, and HTTP status. Keeping the operation small makes its permission boundary easier to understand and test. This example is deliberately a basic fetch-and-extract tool, not a JavaScript-rendering browser, a crawler, or a general-purpose internet proxy.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Respect a site’s access rules and avoid collecting sensitive or personal information. A public URL is not automatically permission to scrape it. The server validates inputs, restricts the example to HTTP and HTTPS, applies a timeout and response-size ceiling, and rejects non-successful HTTP responses. Those controls are a baseline, not a substitute for authentication, network-level protections, or a site-specific review.
Pick an SDK and prepare the project
OpenAI’s guide shows TypeScript with @modelcontextprotocol/sdk and Zod, or Python with the mcp package. The example below uses TypeScript; choose the language your team already operates. The available guidance does not establish a performance ranking between these SDKs.
-
Install a current Node.js runtime and npm, then create a project directory and initialize it with
npm init -y. -
Install the SDK, schema library, and HTML parser:
npm install @modelcontextprotocol/sdk zod cheerio. Install TypeScript and the Node type definitions as development dependencies:npm install -D typescript tsx @types/node.The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Create
tsconfig.jsonwith{"compilerOptions":{"target":"ES2022","module":"NodeNext","moduleResolution":"NodeNext","strict":true,"esModuleInterop":true,"skipLibCheck":true,"outDir":"dist"},"include":["src/**/*.ts"]}. Set your package to use ES modules by adding"type":"module"topackage.json. -
Create
src/server.tsand paste the implementation below. The official MCP SDK package and installation approach are documented in the OpenAI MCP server guide; check that guide and the SDK’s current documentation for version-specific changes.Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Implement the page-fetch tool
This server uses the TypeScript SDK’s high-level McpServer and StdioServerTransport APIs. Its one tool, fetch_public_page, accepts a URL and a maximum text length, and returns both readable text and structured fields. The handler enforces a response-size cap and timeout rather than trusting the caller’s requested limit.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import * as cheerio from "cheerio";
const MAX_RESPONSE_BYTES = 2_000_000;
const MAX_TEXT_CHARS = 20_000;
const REQUEST_TIMEOUT_MS = 15_000;
const server = new McpServer({
name: "public-page-scraper",
version: "1.0.0",
}, {
instructions: "Fetch one public HTTP or HTTPS HTML page at a time. Keep requests within site rules; do not use this tool for private data or unrestricted crawling. The caller's requested text limit is capped by the server.",
});
server.registerTool(
"fetch_public_page",
{
title: "Fetch public page text",
description: "Fetch one public HTML page and return its title, readable text, final URL, and HTTP status. Does not execute page JavaScript.",
inputSchema: {
url: z.string().url().describe("Public page URL using HTTP or HTTPS"),
maxTextChars: z.number().int().min(100).max(MAX_TEXT_CHARS).default(8_000)
.describe("Maximum characters of extracted text to return"),
},
outputSchema: {
requestedUrl: z.string(),
finalUrl: z.string(),
status: z.number(),
title: z.string(),
text: z.string(),
truncated: z.boolean(),
},
annotations: {
readOnlyHint: true,
openWorldHint: true,
destructiveHint: false,
},
},
async ({ url, maxTextChars }) => {
let parsed: URL;
try {
parsed = new URL(url);
} catch {
throw new Error("Provide a valid absolute URL.");
}
if (!["http:", "https:"].includes(parsed.protocol)) {
throw new Error("Only HTTP and HTTPS URLs are allowed.");
}
if (parsed.username || parsed.password) {
throw new Error("URLs containing embedded credentials are not allowed.");
}
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
try {
const response = await fetch(parsed, {
signal: controller.signal,
headers: { accept: "text/html,application/xhtml+xml" },
redirect: "follow",
});
if (!response.ok) {
throw new Error(`Page returned HTTP ${response.status}.`);
}
const contentType = response.headers.get("content-type") ?? "";
if (!contentType.toLowerCase().includes("text/html")) {
throw new Error("The response is not HTML.");
}
const declaredLength = Number(response.headers.get("content-length") ?? 0);
if (declaredLength > MAX_RESPONSE_BYTES) {
throw new Error("The page exceeds the 2 MB response limit.");
}
const bytes = new Uint8Array(await response.arrayBuffer());
if (bytes.byteLength > MAX_RESPONSE_BYTES) {
throw new Error("The page exceeds the 2 MB response limit.");
}
const html = new TextDecoder().decode(bytes);
const $ = cheerio.load(html);
$("script, style, noscript, svg, iframe").remove();
const title = $("title").first().text().trim();
const fullText = $("body").text().replace(/\s+/g, " ").trim();
const limit = Math.min(maxTextChars, MAX_TEXT_CHARS);
const text = fullText.slice(0, limit);
const structured = {
requestedUrl: parsed.toString(),
finalUrl: response.url,
status: response.status,
title,
text,
truncated: fullText.length > text.length,
};
return {
content: [{ type: "text", text: JSON.stringify(structured, null, 2) }],
structuredContent: structured,
};
} catch (error) {
if (error instanceof Error && error.name === "AbortError") {
throw new Error("The page request timed out after 15 seconds.");
}
throw error;
} finally {
clearTimeout(timer);
}
},
);
const transport = new StdioServerTransport();
await server.connect(transport);
Run the server with npx tsx src/server.ts. Standard input and output are the local transport; do not add ordinary log messages to stdout, because they can interfere with MCP messages. Send diagnostics to stderr if needed.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →The tool’s openWorldHint: true accurately reflects that it contacts public websites. readOnlyHint and destructiveHint describe this handler’s behavior; annotations are not authorization or safety controls. OpenAI’s security guidance says to treat every tool input as untrusted, validate it, and enforce authorization and limits at the server (MCP server guide).
Security and reliability boundaries to add before broader use
Prevent server-side request forgery
A protocol-level URL check does not stop a caller from targeting loopback, private-network, link-local, or cloud metadata addresses, and redirects can lead to a different host. Before running this on a reachable service, resolve and reject prohibited IP ranges, revalidate every redirect target, and enforce outbound network rules at the infrastructure layer. Do not assume hostname checks alone are sufficient; DNS can change between validation and connection.
Bound usage
-
Apply per-user authentication and rate limits on a shared server. The local stdio sample is not an authenticated multi-user service.
-
Set limits for response bytes, extracted characters, concurrent requests, redirect count, and total work. Consider streamed response reading so a huge body is stopped before it is fully buffered.
Free tools Windows power users keep installed
One-click scans. No signup required.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.Rank #3
SaleAnker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
-
Keep secrets and unnecessary personal data out of tool descriptions, results, and logs. If a future tool performs writes or other consequential actions, require appropriate user confirmation and server-side authorization.
-
Record operational errors and latency without retaining full page bodies or credentials by default. Public internet access can fail or vary by target, so return clear bounded errors rather than retrying indefinitely.
Test the MCP server locally
Use MCP Inspector, the documented local tool for connecting to and inspecting an MCP server. Its command-line workflow can launch a stdio server; run this from the project directory:
npx @modelcontextprotocol/inspector npx tsx src/server.ts
In Inspector, verify that initialization succeeds and fetch_public_page appears with the expected schema. Try a representative public HTML URL, then an invalid URL, an unsupported protocol, a non-HTML response, an oversized response, and a slow or unreachable host. Inspect the structured result, errors, and annotations. The Inspector and local workflow are described in the OpenAI MCP server guide.
Test redirect behavior and authorization boundaries as well as the happy path. In particular, validate that the deployed server cannot be induced to fetch internal services. Do not infer that a successful local test establishes permission to scrape any target site.
How do I add an MCP server to Codex?
The Docs MCP connection below is useful if you want Codex to consult OpenAI’s developer documentation. It is not the scraper server above. The documented CLI setup is:
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
codex mcp add openaiDeveloperDocs --url https://developers.openai.com/mcp
codex mcp list
Alternatively, the documented TOML entry is:
[mcp_servers.openaiDeveloperDocs]
url = "https://developers.openai.com/mcp"
Codex CLI and the IDE extension share the documented server configuration. The Docs MCP endpoint is a documentation-only, read-only service; keep its name and purpose distinct from your own server. Configuration for arbitrary user-built Codex servers can change; consult the current Codex MCP documentation for its supported transport and configuration before connecting a custom endpoint.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Deploy only when Codex needs a remote service
For a local personal workflow, stdio avoids operating a network service. For a remote or shared deployment, the OpenAI deployment guidance calls for a stable, publicly reachable HTTPS endpoint using Streamable HTTP, with service connectivity and preserved authorization boundaries. Plan for credentials, secret storage, rate limiting, logs and metrics, availability, data residency, and a rollback path when updating the service (OpenAI MCP deployment guidance).
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
| Decision | Local stdio | Remote service |
|---|---|---|
| Reachability | Runs on the developer’s machine; suitable for local use. | Needs stable, publicly reachable HTTPS for public deployment. |
| Transport | Standard input/output in this example. | OpenAI deployment guidance specifies Streamable HTTP. |
| Operations | Local process lifecycle and local debugging. | Requires service connectivity, authorization boundaries, and operational logs and metrics. |
| Data and secrets | Keep local credentials and captured content under local controls. | Plan secret management and data residency for the hosting environment. |
Common errors and fixes
-
Inspector cannot start the server: confirm dependencies are installed, the command runs from the project root, and the TypeScript file compiles. Keep server protocol output on stdout free of logs.
-
Tool list is empty or initialization fails: check that the server connects to the selected transport and that the Inspector is launching the intended file. Review stderr for startup errors.
-
“Only HTTP and HTTPS” error: supply an absolute
http://orhttps://URL, not a bare hostname or another protocol. -
HTTP status error: the target returned a non-success status. Check whether the page requires a session, blocks automated requests, has moved, or is temporarily unavailable; do not bypass access controls.
PerformanceWindows Errors? Fix Them Before They SpreadDriversOutdated Drivers Are Slowing You DownPerformancePC Slower Than It Used to Be?Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
-
Response is not HTML: this tool intentionally rejects PDFs, images, and other content types. Build a separate tool with an explicit purpose and limits if another format is genuinely needed.
-
Timeout: the sample stops waiting after 15 seconds. Confirm the URL is reachable, then consider a carefully bounded timeout adjustment rather than unlimited waiting.
-
Text is blank or incomplete: the page may render content in JavaScript, or the content may not be in the returned HTML. This fetcher does not run a browser; use an appropriate rendering approach only when needed and permitted.
-
Too many requests or inconsistent results: reduce call frequency, add per-user rate limits and bounded retries where appropriate, and account for the target site’s behavior. Do not build unrestricted crawling into a one-page tool.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Or skip the browser setup
If your actual goal is to capture a rendered website rather than build a custom scraper, ScreenshotNeo is a website screenshot API and MCP server from Yorker Media. A single GET request returns a PNG, JPEG, WebP, or PDF; its MCP tools include take_screenshot, get_page_info, and capture_pdf. Cookie banners, newsletter popups, and chat widgets are removed before capture, and each cleanup step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; response headers identify the page verdict and billing status. See the ScreenshotNeo site and API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
There is also an MCP server for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots. Sign up free for 1,000 screenshots a month, with no card required.
FAQ
Does this example scrape pages that require JavaScript?
No. It parses the HTML response and does not run browser JavaScript. A JavaScript-rendered page may therefore return incomplete or empty text.
Can I use this tool to crawl a whole site?
The example is designed for one page per call. A crawler needs additional scope controls, deduplication, concurrency limits, and site-specific rules; those are not implemented here.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errors