This release is a pre-release and may not be stable for production use.
Friday MCP
MCP tools clients, transports and programmatic servers. Use the protocol APIs directly or let Friday Runtime own discovery, tool admission, diagnostics and lifecycle.
Distribution: friday-framework-mcp · Import: friday_mcp
Python: 3.13.4+ · Status: alpha · License: MIT
Installation
python -m pip install "friday-framework-mcp==0.1.0a4"
Friday distributions use the same release version; keep internal Friday dependencies aligned.
Quick start: a local tools server and client
These two files use installed packages and an owned local subprocess. They require no network, credentials or model. Save this as server.py:
import asyncio
from friday_mcp.client.protocol import JSONValue
from friday_mcp.server import ModernStdioMCPServer, ToolCallResult
server = ModernStdioMCPServer()
async def echo(arguments: dict[str, JSONValue]) -> ToolCallResult:
return ToolCallResult.text(str(arguments["message"]))
server.register_tool(
{
"name": "echo", "description": "Echo a message",
"inputSchema": {
"type": "object", "properties": {"message": {"type": "string"}},
"required": ["message"], "additionalProperties": False,
},
},
echo,
)
asyncio.run(server.serve())
Save this beside it as client.py, then run python client.py:
import asyncio
from pathlib import Path
import sys
from friday_mcp.client.stdio import StdioMCPClient
async def main() -> None:
async with StdioMCPClient(
name="demo", command=sys.executable,
args=["-u", str(Path(__file__).with_name("server.py"))],
protocol_profile="modern",
) as client:
await client.list_tools()
print(await client.call_tool("echo", {"message": "Hello from MCP"}))
asyncio.run(main())
Expected output: Hello from MCP. Keep server stdout exclusively for protocol messages. Always await client/server teardown. This is a tools-profile demonstration, not whole-protocol conformance.
Supported roles and profiles
| Role | Implemented transport/profile |
|---|---|
| Modern programmatic client | Explicit 2026-07-28 stdio and Streamable HTTP |
| Compatible HTTP client | Explicit 2025-11-25, including initialization/session handling |
| Modern programmatic server | 2026-07-28 stdio or Streamable HTTP |
| Retained legacy clients/server APIs | 2024-11-05 compatibility, including legacy HTTP+SSE |
| Integrated Runtime/Chat client | Configured stdio; explicitly opted-in HTTPS Streamable HTTP |
Legacy HTTP+SSE is not the modern Streamable HTTP transport. Stdio configuration defaults to legacy compatibility; select modern or auto explicitly. HTTP requires a dated version and matching admission policy. The official mcp SDK is a development interoperability dependency, not Friday's production protocol implementation.
The optional server extra installs standalone HTTP server dependencies: python -m pip install "friday-framework-mcp[server]==0.1.0a4". full adds broader Friday integrations; extras do not activate remote peers.
Integrated Runtime/Chat configuration
tools.providers.mcp configures Friday as a client, not as a server. It is disabled by default. The client guide contains complete config.yaml examples for stdio and dated HTTPS profiles, remote/global opt-ins, environment credential references and canonical tool filters.
Runtime owns startup/reconnect discovery and registration. A required missing selected tool can stop startup even for an optional peer. Use public stop/start for integrated rediscovery. Programmatic clients also offer explicit generation-bound catalog refresh; it never replays a tool call and is not an automatic subscription.
Boundaries to understand
- These are bounded tools profiles. Modern clients do not advertise roots, sampling, elicitation or Tasks; interactive
input_requiredcontinuation is unsupported. Integrated resources/prompts are not implemented. Do not claim complete MCP conformance. - Modern text and structured JSON results are supported within dated rules. Unsupported media/resources and interactive continuation fail explicitly; no implicit URL/resource fetching occurs.
- Output-schema validation supports a bounded JSON Schema 2020-12 subset; external references, regex and unsupported constructs are rejected, not silently ignored.
- Default client ceilings include 1 MiB frames/catalog aggregate, 64 KiB tool results, four pending requests, 16 catalog pages and 256 tools. Runtime adds stricter admission/schema caps. User limits only lower the applicable modern ceilings.
- Remote clients require verified HTTPS and per-connection address policy. No redirects, environment proxies, TLS relaxation or automatic failed-call replay. Bearer credentials are explicit; OAuth discovery/login is not implemented.
- The modern HTTP server has one POST endpoint with explicit Host/Origin/bearer/TLS policy. It does not supply protocol sessions, a cache engine or OAuth login. Authentication and deployment remain application responsibilities.
See the guides for the full role/revision matrix, server lifecycle, protocol-specific errors, schema/result limits, security policy and controlled migration.
Development
Work from the monorepo root after the shared contributor setup. Run the focused suite:
uv run --no-sync pytest packages/friday-mcp/tests_mcp -q
Documentation and support
Client configuration · Server APIs · Protocol migration · Source · Issues · Contributing
License
MIT.
Metadata
Release files for friday-framework-mcp 0.1.0a4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| friday_framework_mcp-0.1.0a4.tar.gz | 145.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| friday_framework_mcp-0.1.0a4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 230.5 kB
Release files / friday_framework_mcp-0.1.0a4.tar.gz
| Download URL | friday_framework_mcp-0.1.0a4.tar.gz |
|---|---|
| Size | 145.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b06b0cb67a2f722b55cc09315dd5a81d216861da3aa7f4a0aaf9b293d376293
|
|
BLAKE2b-256 checksum How to use checksums |
e6a4ea07611fba35b7116df5a841108a1e17e55b72fa1d966d324fef962a84ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","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}
|
Release files / friday_framework_mcp-0.1.0a4-py3-none-any.whl
| Download URL | friday_framework_mcp-0.1.0a4-py3-none-any.whl |
|---|---|
| Size | 85.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3bfcb48e2c8479e1a16a8f50441b4fd980604bb7cfcd7bc940f5fc8e0eebf83e
|
|
BLAKE2b-256 checksum How to use checksums |
905033561a30232a2b962e5e67ed2d2338a622275c1d1d93e2507435588ae7e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","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}
|