Shared runtime toolkit for the mcpwright suite of MCP servers — async HTTP client, cache, and server helpers.
Project description
mcpwright-core
The shared runtime toolkit for the mcpwright suite of MCP servers. Not a server itself — a small library the suite's servers (edgar, census, soi, …) depend on so they don't each re-implement the same plumbing.
Status: extracted once three servers existed and the seams were clear ("wait for two, then DRY"). Composable pieces — import what you need; no server uses all of it.
What's in it
| Import | What it is |
|---|---|
AsyncHttpClient |
Async httpx base: descriptive User-Agent, retry + exponential backoff on transient failures (429 / 5xx / network), optional throttling, and a streaming download_to(url, path) for large files. Subclass it and add your endpoint methods. |
RateLimiter |
Serializes requests to a minimum spacing (RateLimiter.per_second(8)), for services with a fair-access policy like the SEC. |
TTLCache |
In-memory cache with per-entry TTL + a byte budget (LRU eviction). For servers that make live calls; bulk-download servers don't need it. |
READ_ONLY |
The ToolAnnotations(readOnlyHint=True, openWorldHint=True) every suite tool carries. |
app_context(ctx, AppContext) |
Pulls the lifespan-managed app context out of an MCP request Context. |
McpwrightError / HttpError |
The error hierarchy; each server's error type derives from these. |
Usage
from mcpwright_core import AsyncHttpClient, RateLimiter, HttpError
class MyError(HttpError):
pass
class MyClient(AsyncHttpClient):
USER_AGENT = "my-mcp (https://github.com/mcpwright/my-mcp)"
def __init__(self) -> None:
super().__init__(error_cls=MyError, rate_limiter=RateLimiter.per_second(8))
async def widget(self, widget_id: str) -> dict:
return await self.get_json(f"https://api.example.com/widgets/{widget_id}")
Install
uv add mcpwright-core # in a suite server's project
Servers pin a compatible range, e.g. mcpwright-core>=0.1,<0.2.
Develop
uv sync
uv run ruff check src/ && uv run ruff format --check src/
uv run mypy
uv run pytest
Built to the suite engineering standard: ruff + mypy (strict-ish) + pytest + pre-commit, CI on
every PR, branch-protected main. Part of the mcpwright suite —
built by Devender Gollapally.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcpwright_core-0.1.0.tar.gz.
File metadata
- Download URL: mcpwright_core-0.1.0.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
073dcf3658b9156ad57efd99885e5495567e661c3675bf2a61b1a1df1f8f9bae
|
|
| MD5 |
110a1a59e3423a5d3a641c5b0c7e7b86
|
|
| BLAKE2b-256 |
970c855f39df56104f7fdf5017dea1a417f4bb8de35e5e72b4d464e2726f5bd4
|
File details
Details for the file mcpwright_core-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcpwright_core-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3703064499323d44e65de0a36481d40f47263c760adee9cbc4359e6db22e8308
|
|
| MD5 |
bbe212c8dbc400ba8b450dd5bac53df5
|
|
| BLAKE2b-256 |
5084ffed2d681ea9b8224e33c82332cbdc1a9fd2e8be6c6c88029dbc216d9786
|