Skip to main content
Pre-release

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_required continuation 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)

Source distribution for friday-framework-mcp 0.1.0a4
File Size Uploaded
friday_framework_mcp-0.1.0a4.tar.gz 145.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for friday-framework-mcp 0.1.0a4
File Interpreter ABI Platform
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}
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page