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.

Build an MCP server by choosing the capability you want to expose, registering it as a tool, resource, or prompt, and connecting the server with the transport that matches your host. For a local development workflow, the current TypeScript SDK v2 uses Node.js 20 or later, an ES-module project, a declared input schema, and stdio. Remote deployments should use the current Streamable HTTP guidance for the selected SDK rather than copying an older SSE example.

Decide what your web application should expose

Model Context Protocol (MCP) gives a host a standard way to discover and use application capabilities. Start at the application boundary, not with the protocol. Pick one narrow operation that is useful and safe to invoke.

Tools for actions

Use a tool when the model should ask your server to do something: create a support ticket, query a project system, render a page, or run a deployment check. A tool has a name, description, input schema, and handler. The host can validate arguments before the handler runs.

Resources for data

Use a resource when the client should read data identified by a URI, such as a generated report, configuration document, or project file. Resources are read-oriented; they are not a replacement for an action that changes state.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • 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.

Prompts for reusable instructions

Use a prompt for a reusable prompt template that a client can present or insert into a conversation. It is appropriate for repeatable workflows, not for performing the underlying business operation.

A small first server with one well-scoped tool is easier to inspect and secure. Add resources or prompts only when their behavior is genuinely different from a tool.

Choose an SDK and keep its version line consistent

Choice Requirement and fit Practical advice
TypeScript SDK v2 Node.js 20 or later; TypeScript project configured as an ES module. Use the v2 server package and its v2 API examples together.
Python SDK v2 Python 3.10 or later. Use the Python v2 package and FastMCP examples; do not copy TypeScript APIs.
TypeScript v1 material Older documentation and package line. Useful for transport concepts, but verify every API against the v2 guide before using it.

The current TypeScript v2 server package implements the 2026-07-28 MCP specification and replaces the older monolithic @modelcontextprotocol/sdk package. Package names, imports, and helper functions can therefore differ in older tutorials. Python likewise maintains separate v2 and v1 documentation.

Build a local TypeScript server over stdio

The following minimal project exposes a state-changing-looking operation without depending on an external service. Replace the handler body with your application call and preserve the schema and error behavior.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

1. Create the project

mkdir web-mcp-server
cd web-mcp-server
npm init -y
npm install @modelcontextprotocol/server zod
npm install --save-dev typescript tsx

Configure the project as an ES module and add a development command:

{
  "type": "module",
  "scripts": { "dev": "tsx src/server.ts" }
}

Save that JSON in package.json. Create src/server.ts:

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.
import { McpServer } from "@modelcontextprotocol/server";
import { serveStdio } from "@modelcontextprotocol/server/stdio";
import { z } from "zod";

const server = new McpServer({
  name: "web-development-server",
  version: "1.0.0"
});

server.registerTool(
  "create_preview_request",
  {
    description: "Create a preview request for a web page and return its tracking data.",
    inputSchema: {
      url: z.string().url().describe("The page URL to preview"),
      viewport: z.enum(["desktop", "mobile"]).default("desktop")
    }
  },
  async ({ url, viewport }) => {
    const request = {
      id: crypto.randomUUID(),
      url,
      viewport,
      status: "queued"
    };

    return {
      content: [{ type: "text", text: JSON.stringify(request) }]
    };
  }
);

await serveStdio(server);

The exact import paths and registration helper belong to the v2 package you install; if the package’s current guide shows a server factory passed to serveStdio, follow that form rather than mixing it with a v1 example. The important protocol decisions are the declared name, description, schema, handler, and stdio transport.

2. Why the schema matters

The url field is validated before the handler executes, and viewport is constrained to known values. Rejecting malformed input at the protocol boundary prevents application code from receiving surprising values. Describe side effects honestly: if a tool creates a deployment, sends mail, deletes data, or incurs a charge, say so in its description and require the arguments needed for confirmation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. Keep stdout clean

With stdio, JSON-RPC messages use standard input and standard output. Never call console.log for diagnostics; its bytes can corrupt the protocol stream. Send diagnostics to standard error instead:

console.error("preview request received", request.id);

Stdio is intended for a host that launches your server as a local child process. The process lifetime is controlled by that host, so do not assume a long-running public HTTP service.

Implement the same boundary with Python

The official Python v2 SDK requires Python 3.10 or later and documents FastMCP for tools, resources, and prompts. Install the development extra:

python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]"

A small FastMCP server can expose the same operation:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker 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.
from mcp.server.fastmcp import FastMCP
from pydantic import AnyUrl
from uuid import uuid4

mcp = FastMCP("web-development-server")

@mcp.tool()
def create_preview_request(url: AnyUrl, viewport: str = "desktop") -> dict:
    """Queue a preview request for a web page."""
    if viewport not in {"desktop", "mobile"}:
        raise ValueError("viewport must be desktop or mobile")
    return {
        "id": str(uuid4()),
        "url": str(url),
        "viewport": viewport,
        "status": "queued",
    }

if __name__ == "__main__":
    mcp.run()

Python’s SDK documents stdio, Streamable HTTP, and SSE. Use its versioned examples as a set; do not assume a Python decorator or transport option has a TypeScript equivalent.

Select the transport from the deployment shape

Stdio for a locally spawned process

Choose stdio when Claude, an IDE, or another MCP host starts your server locally. It uses stdin and stdout for JSON-RPC and naturally keeps credentials and application access on the developer’s machine. The main operational rule is to keep stdout exclusively for protocol traffic.

Streamable HTTP for a remote server

For a remotely hosted endpoint, the TypeScript server guidance recommends Streamable HTTP. It supports a network client connecting to a running service instead of spawning a process. Configure authentication, authorization, request limits, logging, and TLS in the framework and deployment you select.

HTTP+SSE compatibility

HTTP+SSE remains available for backwards compatibility in the older TypeScript transport documentation. Because that detailed page describes the v1 line, use the current v2 or framework guide for exact constructors, routes, and session handling. Do not copy a v1 transport snippet into a v2 project without checking its package API.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Inspect and test the server locally

Interactive inspection with MCP Inspector

The TypeScript getting-started workflow launches MCP Inspector with the same command your host will use. Start your server command, connect Inspector’s browser interface, list the available tools, enter valid and invalid arguments, and invoke the tool. Confirm that the schema rejects bad input and that logs appear in the terminal rather than the protocol pane.

Keep the command reproducible, for example npx tsx src/server.ts. If the Inspector cannot connect, first run that command directly and check for syntax errors or output accidentally written to stdout.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • 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

Python’s development workflow

Python documentation describes an mcp dev workflow for launching an interactive development client. It also documents an in-memory Client that calls a tool without a subprocess or listening port. Use in-memory tests for fast checks of schemas, return values, and failure paths; use Inspector for human exploration of discovery and invocation.

Production boundaries and reliability

Keep handlers narrow

One tool should represent one understandable application operation. Validate identifiers, URLs, enum values, and authorization context before invoking downstream code. Return structured content that a host can display, and return actionable errors rather than stack traces or secrets.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Plan for timeouts and retries

Browser automation, databases, and third-party APIs can outlive a model request. Set bounded timeouts in the application layer, make mutating operations idempotent where possible, and include a request identifier in logs. Do not claim an action succeeded until the downstream system confirms it.

Review network exposure

The TypeScript v1 server documentation warns that localhost MCP servers can be exposed to DNS-rebinding attacks and describes host-header validation for its Express helper. Treat that as one documented concern, not a complete security checklist. For a remote deployment, separately review authentication, authorization, origin and host validation, secret storage, rate limits, audit logs, and the network placement of your chosen SDK and framework.

Control cost and latency

Stdio avoids hosting an always-on endpoint but requires every user or host to install the runtime and dependencies. Streamable HTTP centralizes deployment and updates, while adding network latency and operational cost. Measure downstream calls, cache read-only data where appropriate, and avoid exposing an expensive operation as an unconstrained tool.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your MCP tool needs website screenshots, ScreenshotNeo provides a single HTTP call instead of maintaining browser installation, cookie handling, and page-cleanup code. It removes cookie and consent banners, newsletter popups, and chat widgets before capture. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers identify the page verdict and billing result. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use the API from your tool handler or any script:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

See the ScreenshotNeo API documentation for the 63 capture options, including full-page lazy-image loading, CSS-selector element capture, device and retina settings, PDF output, custom CSS and JavaScript, clicks, waits, blocking rules, headers, cookies, geolocation, caching, signed links, asynchronous webhooks, bulk capture, and usage reporting. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Create a free ScreenshotNeo account.

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.

Troubleshoot common failures

“Invalid package” or missing import

Cause: a v1 tutorial was copied into a v2 project, or the package name is wrong. Check the installed package’s v2 documentation, confirm the ES-module setting, and align every import and helper with one SDK line.

Inspector shows no tools

Cause: the process exited, the command points at the wrong file, or startup text was written to stdout. Run the command directly, move logs to stderr, and verify that registration occurs before the transport starts.

Arguments are rejected

Cause: the caller does not match the declared schema. Inspect required fields, enum values, URL formats, and default handling. Improve the tool description instead of weakening validation simply to accept malformed calls.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Remote calls hang

Cause: a downstream operation has no timeout, the HTTP route is incorrect, or a proxy is buffering the stream. Add bounded application timeouts, verify the current Streamable HTTP deployment instructions, and inspect server and proxy logs without exposing credentials.

Works manually but fails in a host

Cause: environment variables, working directories, permissions, or runtime versions differ. Record the exact launch command, use absolute paths where needed, and confirm Node.js 20+ or Python 3.10+ in the host environment.

Final implementation checklist

  • Choose a tool, resource, or prompt based on the behavior the host needs.
  • Use one current SDK version line and verify package names before coding.
  • Declare a precise input schema and an honest description for every tool.
  • Use stdio for locally spawned servers and keep stdout protocol-only.
  • Use current Streamable HTTP guidance for remote deployments; treat SSE examples as compatibility material.
  • Exercise discovery, valid calls, invalid calls, and failure paths with Inspector or an in-memory client.
  • Review authorization, network exposure, timeouts, idempotency, and secret handling before production.

Frequently Asked Questions

Can an MCP server expose both tools and resources?

Yes. A server can register multiple MCP primitives; choose each one according to whether the host invokes an action, reads URI-addressed data, or uses a reusable prompt.

Is stdio suitable for a public SaaS endpoint?

No. Stdio is designed for a host that launches a local child process. A remotely hosted service should follow the current Streamable HTTP deployment guidance.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Should I start with TypeScript or Python?

Use the language already used by your application team. The documented prerequisites are Node.js 20 or later for the TypeScript v2 guide and Python 3.10 or later for the Python v2 SDK.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.