Split protocol types into a standalone mcp-types package (#2973)
This commit is contained in:
committed by
GitHub
parent
03681ed55e
commit
0ee7f1b293
@@ -36,9 +36,10 @@ from typing import Any, cast
|
||||
from urllib.parse import parse_qs, urlparse
|
||||
|
||||
import httpx
|
||||
import mcp_types as types
|
||||
from mcp_types.version import MODERN_PROTOCOL_VERSIONS
|
||||
from pydantic import AnyUrl
|
||||
|
||||
from mcp import types
|
||||
from mcp.client.auth import OAuthClientProvider, TokenStorage
|
||||
from mcp.client.auth.extensions.client_credentials import (
|
||||
ClientCredentialsOAuthProvider,
|
||||
@@ -49,7 +50,6 @@ from mcp.client.client import Client
|
||||
from mcp.client.context import ClientRequestContext
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.shared.auth import AuthorizationCodeResult, OAuthClientInformationFull, OAuthClientMetadata, OAuthToken
|
||||
from mcp.shared.version import MODERN_PROTOCOL_VERSIONS
|
||||
|
||||
# Set up logging to stderr (stdout is for conformance test output)
|
||||
logging.basicConfig(
|
||||
|
||||
@@ -27,7 +27,9 @@ jobs:
|
||||
run: uv python install 3.12
|
||||
|
||||
- name: Build
|
||||
run: uv build
|
||||
run: |
|
||||
uv build --package mcp
|
||||
uv build --package mcp-types
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
|
||||
+24
-12
@@ -419,10 +419,10 @@ For full control over tool responses including the `_meta` field (for passing da
|
||||
|
||||
from typing import Annotated
|
||||
|
||||
from mcp_types import CallToolResult, TextContent
|
||||
from pydantic import BaseModel
|
||||
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.types import CallToolResult, TextContent
|
||||
|
||||
mcp = MCPServer("CallToolResult Example")
|
||||
|
||||
@@ -739,9 +739,10 @@ uv run completion-client
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from mcp_types import PromptReference, ResourceTemplateReference
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.stdio import stdio_client
|
||||
from mcp.types import PromptReference, ResourceTemplateReference
|
||||
|
||||
# Create server parameters for stdio connection
|
||||
server_params = StdioServerParameters(
|
||||
@@ -828,11 +829,11 @@ like OAuth flows, credential collection, or payment processing.
|
||||
|
||||
import uuid
|
||||
|
||||
from mcp_types import ElicitRequestURLParams
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.shared.exceptions import UrlElicitationRequiredError
|
||||
from mcp.types import ElicitRequestURLParams
|
||||
|
||||
mcp = MCPServer(name="Elicitation Example")
|
||||
|
||||
@@ -937,8 +938,9 @@ Tools can interact with LLMs through sampling (generating text):
|
||||
|
||||
<!-- snippet-source examples/snippets/servers/sampling.py -->
|
||||
```python
|
||||
from mcp_types import SamplingMessage, TextContent
|
||||
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.types import SamplingMessage, TextContent
|
||||
|
||||
mcp = MCPServer(name="Sampling Example")
|
||||
|
||||
@@ -1647,8 +1649,9 @@ from collections.abc import AsyncIterator
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import TypedDict
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
@@ -1759,8 +1762,9 @@ uv run examples/snippets/servers/lowlevel/basic.py
|
||||
|
||||
import asyncio
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
@@ -1836,8 +1840,9 @@ uv run examples/snippets/servers/lowlevel/structured_output.py
|
||||
import asyncio
|
||||
import json
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
@@ -1928,8 +1933,9 @@ uv run examples/snippets/servers/lowlevel/direct_call_tool_result.py
|
||||
|
||||
import asyncio
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
@@ -1999,7 +2005,8 @@ For servers that need to handle large datasets, the low-level server provides pa
|
||||
```python
|
||||
"""Example of implementing pagination with the low-level MCP server."""
|
||||
|
||||
from mcp import types
|
||||
import mcp_types as types
|
||||
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
# Sample data to paginate
|
||||
@@ -2045,9 +2052,10 @@ _Full example: [examples/snippets/servers/pagination_example.py](https://github.
|
||||
|
||||
import asyncio
|
||||
|
||||
from mcp_types import PaginatedRequestParams, Resource
|
||||
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.client.stdio import StdioServerParameters, stdio_client
|
||||
from mcp.types import PaginatedRequestParams, Resource
|
||||
|
||||
|
||||
async def list_all_resources() -> None:
|
||||
@@ -2107,7 +2115,9 @@ uv run client
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters, types
|
||||
import mcp_types as types
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.context import ClientRequestContext
|
||||
from mcp.client.stdio import stdio_client
|
||||
|
||||
@@ -2417,7 +2427,9 @@ When calling tools through MCP, the `CallToolResult` object contains the tool's
|
||||
|
||||
import asyncio
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters, types
|
||||
import mcp_types as types
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.stdio import stdio_client
|
||||
|
||||
|
||||
|
||||
+47
-18
@@ -209,9 +209,38 @@ named `mcp.os.win32.utilities` (was `client.stdio.win32`).
|
||||
|
||||
The WebSocket transport has been removed: `mcp.client.websocket.websocket_client`, `mcp.server.websocket.websocket_server`, and the `ws` optional dependency extra (`mcp[ws]`) no longer exist. WebSocket was never part of the MCP specification. Use the streamable HTTP transport instead (`mcp.client.streamable_http.streamable_http_client` on the client, `streamable_http_app()` on the server), which supports bidirectional communication with server-to-client streaming over standard HTTP.
|
||||
|
||||
### `mcp.types` moved to the `mcp-types` package
|
||||
|
||||
The protocol wire types now live in a standalone distribution, `mcp-types`, imported as
|
||||
`mcp_types`. It depends only on `pydantic`, so code that just needs to (de)serialize MCP
|
||||
traffic can install it without the full SDK. The `mcp` package depends on `mcp-types` and
|
||||
continues to re-export the type names at the top level, so `from mcp import Tool` is
|
||||
unchanged. Only the `mcp.types` submodule and `mcp.shared.version` were removed.
|
||||
|
||||
**Why:** keeping the wire types in their own package lets tooling and lightweight clients
|
||||
depend on the protocol schema without pulling in `httpx`, `starlette`, `uvicorn`, and the
|
||||
rest of the server/transport stack.
|
||||
|
||||
**Before (v1):**
|
||||
|
||||
```python
|
||||
from mcp.types import Tool, CallToolResult
|
||||
from mcp.shared.version import LATEST_PROTOCOL_VERSION
|
||||
```
|
||||
|
||||
**After (v2):**
|
||||
|
||||
```python
|
||||
from mcp_types import Tool, CallToolResult
|
||||
from mcp_types.version import LATEST_PROTOCOL_VERSION
|
||||
|
||||
# Top-level re-exports are unchanged:
|
||||
from mcp import Tool, CallToolResult
|
||||
```
|
||||
|
||||
### Removed type aliases and classes
|
||||
|
||||
The following deprecated type aliases and classes have been removed from `mcp.types`:
|
||||
The following deprecated type aliases and classes have been removed from `mcp_types`:
|
||||
|
||||
| Removed | Replacement |
|
||||
|---------|-------------|
|
||||
@@ -231,13 +260,13 @@ from mcp.types import Content, ResourceReference, Cursor
|
||||
**After (v2):**
|
||||
|
||||
```python
|
||||
from mcp.types import ContentBlock, ResourceTemplateReference
|
||||
from mcp_types import ContentBlock, ResourceTemplateReference
|
||||
# Use `str` instead of `Cursor` for pagination cursors
|
||||
```
|
||||
|
||||
### Field names changed from camelCase to snake_case
|
||||
|
||||
All Pydantic model fields in `mcp.types` now use snake_case names for Python attribute access. The JSON wire format is unchanged — serialization still uses camelCase via Pydantic aliases.
|
||||
All Pydantic model fields in `mcp_types` now use snake_case names for Python attribute access. The JSON wire format is unchanged — serialization still uses camelCase via Pydantic aliases.
|
||||
|
||||
**Before (v1):**
|
||||
|
||||
@@ -287,7 +316,7 @@ Results returned from server handlers are now validated against the negotiated p
|
||||
|
||||
### Client validates inbound traffic against the protocol schema
|
||||
|
||||
`ClientSession` now validates server requests, notifications, and results against the negotiated protocol version's schema before parsing them into `mcp.types` models. Spec-invalid server output that the previous monolith parse tolerated may now raise `pydantic.ValidationError` from `list_tools()`, `call_tool()`, and similar calls. `_meta` remains the sanctioned place for result extras (and `experimental` for capability extras).
|
||||
`ClientSession` now validates server requests, notifications, and results against the negotiated protocol version's schema before parsing them into `mcp_types` models. Spec-invalid server output that the previous monolith parse tolerated may now raise `pydantic.ValidationError` from `list_tools()`, `call_tool()`, and similar calls. `_meta` remains the sanctioned place for result extras (and `experimental` for capability extras).
|
||||
|
||||
### `args` parameter removed from `ClientSessionGroup.call_tool()`
|
||||
|
||||
@@ -326,7 +355,7 @@ result = await session.list_tools(cursor="next_page_token")
|
||||
**After (v2):**
|
||||
|
||||
```python
|
||||
from mcp.types import PaginatedRequestParams
|
||||
from mcp_types import PaginatedRequestParams
|
||||
|
||||
result = await session.list_resources(params=PaginatedRequestParams(cursor="next_page_token"))
|
||||
result = await session.list_tools(params=PaginatedRequestParams(cursor="next_page_token"))
|
||||
@@ -415,7 +444,7 @@ raise McpError(ErrorData(code=INVALID_REQUEST, message="bad input"))
|
||||
|
||||
```python
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.types import INVALID_REQUEST
|
||||
from mcp_types import INVALID_REQUEST
|
||||
|
||||
raise MCPError(INVALID_REQUEST, "bad input")
|
||||
# or, if you already have an ErrorData:
|
||||
@@ -590,7 +619,7 @@ In v2, the lowlevel `Server` supports arbitrary request handlers directly via `a
|
||||
|
||||
```python
|
||||
from mcp.server import ServerRequestContext
|
||||
from mcp.types import EmptyResult, SetLevelRequestParams, SubscribeRequestParams
|
||||
from mcp_types import EmptyResult, SetLevelRequestParams, SubscribeRequestParams
|
||||
|
||||
|
||||
async def handle_set_logging_level(ctx: ServerRequestContext, params: SetLevelRequestParams) -> EmptyResult:
|
||||
@@ -663,7 +692,7 @@ actual_notification = notification.root
|
||||
**After (v2):**
|
||||
|
||||
```python
|
||||
from mcp.types import client_request_adapter, server_notification_adapter
|
||||
from mcp_types import client_request_adapter, server_notification_adapter
|
||||
|
||||
# Using TypeAdapter.validate_python()
|
||||
request = client_request_adapter.validate_python(data)
|
||||
@@ -701,7 +730,7 @@ await session.send_request(PingRequest(), EmptyResult)
|
||||
| `ServerResult` | `server_result_adapter` |
|
||||
| `JSONRPCMessage` | `jsonrpc_message_adapter` |
|
||||
|
||||
All adapters are exported from `mcp.types`.
|
||||
All adapters are exported from `mcp_types`.
|
||||
|
||||
### `RequestParams.Meta` replaced with `RequestParamsMeta` TypedDict
|
||||
|
||||
@@ -881,7 +910,7 @@ resource = Resource(name="test", uri=AnyUrl("users/me")) # Would fail validatio
|
||||
**After (v2):**
|
||||
|
||||
```python
|
||||
from mcp.types import Resource
|
||||
from mcp_types import Resource
|
||||
|
||||
# Plain strings accepted
|
||||
resource = Resource(name="test", uri="users/me") # Works
|
||||
@@ -1038,7 +1067,7 @@ async def handle_call_tool(name: str, arguments: dict):
|
||||
|
||||
```python
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
CallToolRequestParams,
|
||||
CallToolResult,
|
||||
ListToolsResult,
|
||||
@@ -1087,13 +1116,13 @@ All handlers receive `ctx: ServerRequestContext` as the first argument. The seco
|
||||
| `@server.progress_notification()` | `on_progress` | `ProgressNotificationParams` | `None` |
|
||||
| — | `on_roots_list_changed` | `NotificationParams \| None` | `None` |
|
||||
|
||||
All `params` and return types are importable from `mcp.types`.
|
||||
All `params` and return types are importable from `mcp_types`.
|
||||
|
||||
**Notification handlers:**
|
||||
|
||||
```python
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.types import ProgressNotificationParams
|
||||
from mcp_types import ProgressNotificationParams
|
||||
|
||||
|
||||
async def handle_progress(ctx: ServerRequestContext, params: ProgressNotificationParams) -> None:
|
||||
@@ -1218,7 +1247,7 @@ async def handle_call_tool(name: str, arguments: dict):
|
||||
|
||||
```python
|
||||
from mcp.server import ServerRequestContext
|
||||
from mcp.types import CallToolRequestParams, CallToolResult, TextContent
|
||||
from mcp_types import CallToolRequestParams, CallToolResult, TextContent
|
||||
|
||||
|
||||
async def handle_call_tool(ctx: ServerRequestContext, params: CallToolRequestParams) -> CallToolResult:
|
||||
@@ -1290,7 +1319,7 @@ Behavior changes:
|
||||
|
||||
### Experimental Tasks support removed
|
||||
|
||||
Tasks (SEP-1686) have been removed from the MCP specification and are no longer part of this SDK. The `mcp.client.experimental`, `mcp.server.experimental`, `mcp.shared.experimental`, and `mcp.server.lowlevel.experimental` modules have been removed, along with the `experimental` properties on `ClientSession`, `ServerSession`, `Server`, and `ServerRequestContext`. The corresponding `Task*` types remain in `mcp.types` as types-only definitions.
|
||||
Tasks (SEP-1686) have been removed from the MCP specification and are no longer part of this SDK. The `mcp.client.experimental`, `mcp.server.experimental`, `mcp.shared.experimental`, and `mcp.server.lowlevel.experimental` modules have been removed, along with the `experimental` properties on `ClientSession`, `ServerSession`, `Server`, and `ServerRequestContext`. The corresponding `Task*` types remain in `mcp_types` as types-only definitions.
|
||||
|
||||
Tasks are expected to return as a separate MCP extension in a future release.
|
||||
|
||||
@@ -1358,7 +1387,7 @@ In v1, MCP protocol types were configured with `extra="allow"`: unknown fields p
|
||||
In v2, MCP types silently ignore extra fields. Unknown constructor keyword arguments and unknown keys in wire data are dropped during validation — no error is raised, and the values do not round-trip:
|
||||
|
||||
```python
|
||||
from mcp.types import CallToolRequestParams
|
||||
from mcp_types import CallToolRequestParams
|
||||
|
||||
params = CallToolRequestParams(
|
||||
name="my_tool",
|
||||
@@ -1404,7 +1433,7 @@ Under OIDC, omitting `application_type` defaults to `"web"`, which an authorizat
|
||||
|
||||
### 2025-11-25 and 2026-07-28 protocol fields modeled
|
||||
|
||||
`mcp.types` models the 2025-11-25 and 2026-07-28 protocol fields (e.g. `resultType`, `ttlMs`/`cacheScope` on cacheable results, `inputResponses`/`requestState` on retried requests), so inbound payloads carrying these keys parse into typed fields and round-trip. `ttlMs`/`cacheScope` default to `0`/`"private"` (immediately stale, not shared-cacheable); `resultType` defaults to `"complete"` on concrete results (`None` on `EmptyResult`); the server strips all of them from the wire at pre-2026 versions.
|
||||
`mcp_types` models the 2025-11-25 and 2026-07-28 protocol fields (e.g. `resultType`, `ttlMs`/`cacheScope` on cacheable results, `inputResponses`/`requestState` on retried requests), so inbound payloads carrying these keys parse into typed fields and round-trip. `ttlMs`/`cacheScope` default to `0`/`"private"` (immediately stale, not shared-cacheable); `resultType` defaults to `"complete"` on concrete results (`None` on `EmptyResult`); the server strips all of them from the wire at pre-2026 versions.
|
||||
|
||||
### `streamable_http_app()` available on lowlevel Server
|
||||
|
||||
@@ -1412,7 +1441,7 @@ The `streamable_http_app()` method is now available directly on the lowlevel `Se
|
||||
|
||||
```python
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.types import ListToolsResult, PaginatedRequestParams
|
||||
from mcp_types import ListToolsResult, PaginatedRequestParams
|
||||
|
||||
|
||||
async def handle_list_tools(ctx: ServerRequestContext, params: PaginatedRequestParams | None) -> ListToolsResult:
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ To run the below test, you'll need to install the following dependencies:
|
||||
import pytest
|
||||
from inline_snapshot import snapshot
|
||||
from mcp import Client
|
||||
from mcp.types import CallToolResult, TextContent
|
||||
from mcp_types import CallToolResult, TextContent
|
||||
|
||||
from server import app
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
from typing import Annotated
|
||||
|
||||
from mcp_types import CallToolResult, TextContent
|
||||
from pydantic import BaseModel
|
||||
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.types import CallToolResult, TextContent
|
||||
|
||||
mcp = MCPServer("Echo Server")
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.server.mcpserver.prompts.base import UserMessage
|
||||
from mcp.server.streamable_http import EventCallback, EventMessage, EventStore
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
AudioContent,
|
||||
Completion,
|
||||
CompletionArgument,
|
||||
@@ -33,7 +33,7 @@ from mcp.types import (
|
||||
TextResourceContents,
|
||||
UnsubscribeRequestParams,
|
||||
)
|
||||
from mcp.types.jsonrpc import MISSING_REQUIRED_CLIENT_CAPABILITY
|
||||
from mcp_types.jsonrpc import MISSING_REQUIRED_CLIENT_CAPABILITY
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -8,7 +8,7 @@ from typing import TypeVar
|
||||
|
||||
import anyio
|
||||
import click
|
||||
from mcp import types
|
||||
import mcp_types as types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import anyio
|
||||
import click
|
||||
from mcp import types
|
||||
import mcp_types as types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ Using the MCP client, you can retrieve resources like this using the STDIO trans
|
||||
|
||||
```python
|
||||
import asyncio
|
||||
from mcp.types import AnyUrl
|
||||
from pydantic import AnyUrl
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.client.stdio import StdioServerParameters, stdio_client
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ from urllib.parse import urlparse
|
||||
|
||||
import anyio
|
||||
import click
|
||||
from mcp import types
|
||||
import mcp_types as types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
SAMPLE_RESOURCES = {
|
||||
|
||||
+1
-1
@@ -2,8 +2,8 @@ import logging
|
||||
|
||||
import anyio
|
||||
import click
|
||||
import mcp_types as types
|
||||
import uvicorn
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from dataclasses import dataclass
|
||||
from uuid import uuid4
|
||||
|
||||
from mcp.server.streamable_http import EventCallback, EventId, EventMessage, EventStore, StreamId
|
||||
from mcp.types import JSONRPCMessage
|
||||
from mcp_types import JSONRPCMessage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@ import logging
|
||||
|
||||
import anyio
|
||||
import click
|
||||
import mcp_types as types
|
||||
import uvicorn
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import anyio
|
||||
import click
|
||||
from mcp import types
|
||||
import mcp_types as types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.shared._httpx_utils import create_mcp_http_client
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from dataclasses import dataclass
|
||||
from uuid import uuid4
|
||||
|
||||
from mcp.server.streamable_http import EventCallback, EventId, EventMessage, EventStore, StreamId
|
||||
from mcp.types import JSONRPCMessage
|
||||
from mcp_types import JSONRPCMessage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ import logging
|
||||
|
||||
import anyio
|
||||
import click
|
||||
import mcp_types as types
|
||||
import uvicorn
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
from .event_store import InMemoryEventStore
|
||||
|
||||
+2
-1
@@ -10,8 +10,9 @@ import json
|
||||
import random
|
||||
from datetime import datetime
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
|
||||
@@ -5,9 +5,10 @@ uv run completion-client
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from mcp_types import PromptReference, ResourceTemplateReference
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.stdio import stdio_client
|
||||
from mcp.types import PromptReference, ResourceTemplateReference
|
||||
|
||||
# Create server parameters for stdio connection
|
||||
server_params = StdioServerParameters(
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
import asyncio
|
||||
|
||||
from mcp_types import PaginatedRequestParams, Resource
|
||||
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.client.stdio import StdioServerParameters, stdio_client
|
||||
from mcp.types import PaginatedRequestParams, Resource
|
||||
|
||||
|
||||
async def list_all_resources() -> None:
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
import asyncio
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters, types
|
||||
import mcp_types as types
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.stdio import stdio_client
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@ uv run client
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters, types
|
||||
import mcp_types as types
|
||||
|
||||
from mcp import ClientSession, StdioServerParameters
|
||||
from mcp.client.context import ClientRequestContext
|
||||
from mcp.client.stdio import stdio_client
|
||||
|
||||
|
||||
@@ -28,11 +28,13 @@ import webbrowser
|
||||
from typing import Any
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from mcp import ClientSession, types
|
||||
import mcp_types as types
|
||||
from mcp_types import URL_ELICITATION_REQUIRED
|
||||
|
||||
from mcp import ClientSession
|
||||
from mcp.client.context import ClientRequestContext
|
||||
from mcp.client.sse import sse_client
|
||||
from mcp.shared.exceptions import MCPError, UrlElicitationRequiredError
|
||||
from mcp.types import URL_ELICITATION_REQUIRED
|
||||
|
||||
|
||||
async def handle_elicitation(
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
Completion,
|
||||
CompletionArgument,
|
||||
CompletionContext,
|
||||
@@ -7,6 +6,8 @@ from mcp.types import (
|
||||
ResourceTemplateReference,
|
||||
)
|
||||
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
|
||||
mcp = MCPServer(name="Example")
|
||||
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
from typing import Annotated
|
||||
|
||||
from mcp_types import CallToolResult, TextContent
|
||||
from pydantic import BaseModel
|
||||
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.types import CallToolResult, TextContent
|
||||
|
||||
mcp = MCPServer("CallToolResult Example")
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@ like OAuth flows, credential collection, or payment processing.
|
||||
|
||||
import uuid
|
||||
|
||||
from mcp_types import ElicitRequestURLParams
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.shared.exceptions import UrlElicitationRequiredError
|
||||
from mcp.types import ElicitRequestURLParams
|
||||
|
||||
mcp = MCPServer(name="Elicitation Example")
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@ uv run examples/snippets/servers/lowlevel/basic.py
|
||||
|
||||
import asyncio
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@ uv run examples/snippets/servers/lowlevel/direct_call_tool_result.py
|
||||
|
||||
import asyncio
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
|
||||
@@ -6,8 +6,9 @@ from collections.abc import AsyncIterator
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import TypedDict
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
|
||||
@@ -5,8 +5,9 @@ uv run examples/snippets/servers/lowlevel/structured_output.py
|
||||
import asyncio
|
||||
import json
|
||||
|
||||
import mcp_types as types
|
||||
|
||||
import mcp.server.stdio
|
||||
from mcp import types
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Example of implementing pagination with the low-level MCP server."""
|
||||
|
||||
from mcp import types
|
||||
import mcp_types as types
|
||||
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
# Sample data to paginate
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from mcp_types import SamplingMessage, TextContent
|
||||
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.types import SamplingMessage, TextContent
|
||||
|
||||
mcp = MCPServer(name="Sampling Example")
|
||||
|
||||
|
||||
+31
-27
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "mcp"
|
||||
dynamic = ["version"]
|
||||
dynamic = ["version", "dependencies"]
|
||||
description = "Model Context Protocol SDK"
|
||||
readme = "README.v2.md"
|
||||
requires-python = ">=3.10"
|
||||
@@ -24,29 +24,6 @@ classifiers = [
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Programming Language :: Python :: 3.14",
|
||||
]
|
||||
dependencies = [
|
||||
# anyio < 4.10 triggers a compile-time SyntaxWarning on Python 3.14 (PEP 765,
|
||||
# "'return' in a 'finally' block"); for stdio servers it lands on the child's
|
||||
# stderr (agronholm/anyio#816, fixed in 4.10).
|
||||
"anyio>=4.10; python_version >= '3.14'",
|
||||
"anyio>=4.9; python_version < '3.14'",
|
||||
"httpx>=0.27.1,<1.0.0",
|
||||
"httpx-sse>=0.4",
|
||||
"pydantic>=2.12.0",
|
||||
"starlette>=0.48.0; python_version >= '3.14'",
|
||||
"starlette>=0.27; python_version < '3.14'",
|
||||
"python-multipart>=0.0.9",
|
||||
"sse-starlette>=3.0.0",
|
||||
"pydantic-settings>=2.5.2",
|
||||
"uvicorn>=0.31.1; sys_platform != 'emscripten'",
|
||||
"jsonschema>=4.20.0",
|
||||
"pywin32>=311; sys_platform == 'win32'",
|
||||
"pyjwt[crypto]>=2.10.1",
|
||||
"typing-extensions>=4.13.0",
|
||||
"typing-inspection>=0.4.1",
|
||||
"opentelemetry-api>=1.28.0",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
rich = ["rich>=13.9.4"]
|
||||
cli = ["typer>=0.16.0", "python-dotenv>=1.0.0"]
|
||||
@@ -118,6 +95,31 @@ vcs = "git"
|
||||
style = "pep440"
|
||||
bump = true
|
||||
|
||||
[tool.hatch.metadata.hooks.uv-dynamic-versioning]
|
||||
dependencies = [
|
||||
# anyio < 4.10 triggers a compile-time SyntaxWarning on Python 3.14 (PEP 765,
|
||||
# "'return' in a 'finally' block"); for stdio servers it lands on the child's
|
||||
# stderr (agronholm/anyio#816, fixed in 4.10).
|
||||
"anyio>=4.10; python_version >= '3.14'",
|
||||
"anyio>=4.9; python_version < '3.14'",
|
||||
"httpx>=0.27.1,<1.0.0",
|
||||
"httpx-sse>=0.4",
|
||||
"mcp-types=={{ version }}",
|
||||
"pydantic>=2.12.0",
|
||||
"starlette>=0.48.0; python_version >= '3.14'",
|
||||
"starlette>=0.27; python_version < '3.14'",
|
||||
"python-multipart>=0.0.9",
|
||||
"sse-starlette>=3.0.0",
|
||||
"pydantic-settings>=2.5.2",
|
||||
"uvicorn>=0.31.1; sys_platform != 'emscripten'",
|
||||
"jsonschema>=4.20.0",
|
||||
"pywin32>=311; sys_platform == 'win32'",
|
||||
"pyjwt[crypto]>=2.10.1",
|
||||
"typing-extensions>=4.13.0",
|
||||
"typing-inspection>=0.4.1",
|
||||
"opentelemetry-api>=1.28.0",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://modelcontextprotocol.io"
|
||||
Documentation = "https://py.sdk.modelcontextprotocol.io/v2/"
|
||||
@@ -131,6 +133,7 @@ packages = ["src/mcp"]
|
||||
typeCheckingMode = "strict"
|
||||
include = [
|
||||
"src/mcp",
|
||||
"src/mcp-types/mcp_types",
|
||||
"tests",
|
||||
"examples/servers",
|
||||
"examples/snippets",
|
||||
@@ -179,7 +182,7 @@ max-complexity = 24 # Default is 10
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"__init__.py" = ["F401"]
|
||||
# Generated by scripts/gen_surface_types.py: raw datamodel-codegen output (TID251 lifts the repo-wide RootModel ban for these generated validators).
|
||||
"src/mcp/types/v*/__init__.py" = ["D212", "E501", "I001", "TID251", "UP007", "UP037"]
|
||||
"src/mcp-types/mcp_types/v*/__init__.py" = ["D212", "E501", "I001", "TID251", "UP007", "UP037"]
|
||||
"tests/server/mcpserver/test_func_metadata.py" = ["E501"]
|
||||
"tests/shared/test_progress_notifications.py" = ["PLW0603"]
|
||||
|
||||
@@ -191,10 +194,11 @@ max-returns = 13 # Default is 6
|
||||
max-statements = 102 # Default is 50
|
||||
|
||||
[tool.uv.workspace]
|
||||
members = ["examples/clients/*", "examples/servers/*", "examples/snippets"]
|
||||
members = ["src/mcp-types", "examples/clients/*", "examples/servers/*", "examples/snippets"]
|
||||
|
||||
[tool.uv.sources]
|
||||
mcp = { workspace = true }
|
||||
mcp-types = { workspace = true }
|
||||
strict-no-cover = { git = "https://github.com/pydantic/strict-no-cover" }
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
@@ -241,7 +245,7 @@ MD059 = false # descriptive-link-text
|
||||
branch = true
|
||||
patch = ["subprocess"]
|
||||
concurrency = ["multiprocessing", "thread"]
|
||||
source = ["src", "tests"]
|
||||
source = ["src", "src/mcp-types/mcp_types", "tests"]
|
||||
omit = [
|
||||
"src/mcp/client/__main__.py",
|
||||
"src/mcp/server/__main__.py",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Regenerate the per-version wire-shape surface packages from vendored schemas.
|
||||
|
||||
Runs `datamodel-code-generator` over each `schema/PINNED.json` entry and
|
||||
writes the result to `src/mcp/types/v<version>/__init__.py` with only the
|
||||
writes the result to `src/mcp-types/mcp_types/v<version>/__init__.py` with only the
|
||||
fixes the raw output needs: a small JSON pre-patch for the known
|
||||
`number`-as-`integer` schema.json defect, a header, full URLs for the spec's
|
||||
site-absolute doc links, and per-version epilogue aliases. Run with
|
||||
@@ -23,7 +23,7 @@ from typing import Any
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||
SCHEMA_DIR = REPO_ROOT / "schema"
|
||||
TYPES_DIR = REPO_ROOT / "src" / "mcp" / "types"
|
||||
TYPES_DIR = REPO_ROOT / "src" / "mcp-types" / "mcp_types"
|
||||
|
||||
# schema.ts -> schema.json renders TypeScript `number` as JSON Schema
|
||||
# `integer` at these sites; patch the JSON before codegen so floats validate.
|
||||
@@ -142,7 +142,7 @@ def run_codegen(schema_path: Path, output_path: Path) -> None:
|
||||
"--output", str(output_path),
|
||||
"--output-model-type", "pydantic_v2.BaseModel",
|
||||
"--target-python-version", "3.10",
|
||||
"--base-class", "mcp.types._wire_base.WireModel",
|
||||
"--base-class", "mcp_types._wire_base.WireModel",
|
||||
"--snake-case-field", "--remove-special-field-name-prefix",
|
||||
"--use-annotated", "--use-field-description", "--use-schema-description",
|
||||
"--enum-field-as-literal", "all",
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# MCP Types
|
||||
|
||||
The wire types for the [Model Context Protocol](https://modelcontextprotocol.io).
|
||||
|
||||
This package holds the protocol message models, JSON-RPC envelope types, per-version
|
||||
surface validators, and the protocol-version registry. Its only runtime dependencies are
|
||||
`pydantic` and `typing-extensions`, so it can be installed on its own when you need to
|
||||
(de)serialize MCP traffic without pulling in the full `mcp` SDK.
|
||||
|
||||
```python
|
||||
from mcp_types import Tool, CallToolRequest
|
||||
from mcp_types.version import LATEST_PROTOCOL_VERSION
|
||||
```
|
||||
|
||||
The `mcp` package re-exports these names, so existing `from mcp import Tool` imports
|
||||
keep working.
|
||||
@@ -4,10 +4,8 @@ Check the latest schema at:
|
||||
https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/draft/schema.json
|
||||
"""
|
||||
|
||||
from mcp.shared.version import LATEST_PROTOCOL_VERSION
|
||||
|
||||
# Re-export everything from _types for backward compatibility
|
||||
from mcp.types._types import (
|
||||
from mcp_types._types import (
|
||||
CLIENT_CAPABILITIES_META_KEY,
|
||||
CLIENT_INFO_META_KEY,
|
||||
DEFAULT_NEGOTIATED_VERSION,
|
||||
@@ -198,7 +196,7 @@ from mcp.types._types import (
|
||||
)
|
||||
|
||||
# Re-export JSONRPC types
|
||||
from mcp.types.jsonrpc import (
|
||||
from mcp_types.jsonrpc import (
|
||||
CONNECTION_CLOSED,
|
||||
HEADER_MISMATCH,
|
||||
INTERNAL_ERROR,
|
||||
@@ -220,6 +218,7 @@ from mcp.types.jsonrpc import (
|
||||
RequestId,
|
||||
jsonrpc_message_adapter,
|
||||
)
|
||||
from mcp_types.version import LATEST_PROTOCOL_VERSION
|
||||
|
||||
__all__ = [
|
||||
# Protocol version constants
|
||||
@@ -3,7 +3,7 @@
|
||||
One model per protocol construct, carrying every field from every supported
|
||||
protocol version, so application code sees a single set of types regardless of
|
||||
the negotiated version. Per-field docstrings note version availability. The
|
||||
`mcp.types.v*` surface packages carry the schema-exact wire shapes.
|
||||
`mcp_types.v*` surface packages carry the schema-exact wire shapes.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -21,7 +21,7 @@ from pydantic import (
|
||||
from pydantic.alias_generators import to_camel
|
||||
from typing_extensions import NotRequired, Self, TypedDict
|
||||
|
||||
from mcp.types.jsonrpc import RequestId
|
||||
from mcp_types.jsonrpc import RequestId
|
||||
|
||||
DEFAULT_NEGOTIATED_VERSION: Final[str] = "2025-03-26"
|
||||
"""The default negotiated version of the Model Context Protocol when no version is specified.
|
||||
@@ -122,7 +122,7 @@ class Request(MCPModel, Generic[RequestParamsT, MethodT]):
|
||||
"""Base class for JSON-RPC requests.
|
||||
|
||||
The JSON-RPC envelope (`jsonrpc`, `id`) is attached by the session layer
|
||||
(see `mcp.types.jsonrpc`), not carried here.
|
||||
(see `mcp_types.jsonrpc`), not carried here.
|
||||
"""
|
||||
|
||||
method: MethodT
|
||||
@@ -2073,7 +2073,7 @@ GetPromptRequestParams.model_rebuild()
|
||||
CallToolRequestParams.model_rebuild()
|
||||
|
||||
# Top-level message unions: superset across all supported protocol versions.
|
||||
# Per-version validity is recorded in `mcp.types.methods`, not enforced here.
|
||||
# Per-version validity is recorded in `mcp_types.methods`, not enforced here.
|
||||
|
||||
ClientRequest = (
|
||||
PingRequest
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Shared pydantic base for the generated `mcp.types.v*` wire-shape packages."""
|
||||
"""Shared pydantic base for the generated `mcp_types.v*` wire-shape packages."""
|
||||
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
"""Per-version method maps and parse/serialize functions for MCP traffic.
|
||||
|
||||
This module is supported public API; the `mcp.types.v*` packages it draws on
|
||||
This module is supported public API; the `mcp_types.v*` packages it draws on
|
||||
are internal validators and not for direct import.
|
||||
|
||||
Surface maps key `(method, version)` to per-version wire types (key absence is
|
||||
the version gate; shape validation is per schema era, i.e. 2025-11-25 for every
|
||||
pre-2026 version and 2026-07-28 for 2026). Monolith maps key `method` to the
|
||||
version-free `mcp.types` models user code receives."""
|
||||
version-free `mcp_types` models user code receives."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -17,10 +17,10 @@ from typing import Any, Final, TypeVar
|
||||
|
||||
from pydantic import BaseModel, TypeAdapter
|
||||
|
||||
import mcp.types as types
|
||||
import mcp.types.v2025_11_25 as v2025
|
||||
import mcp.types.v2026_07_28 as v2026
|
||||
from mcp.shared.version import KNOWN_PROTOCOL_VERSIONS
|
||||
import mcp_types as types
|
||||
import mcp_types.v2025_11_25 as v2025
|
||||
import mcp_types.v2026_07_28 as v2026
|
||||
from mcp_types.version import KNOWN_PROTOCOL_VERSIONS
|
||||
|
||||
__all__ = [
|
||||
"CLIENT_NOTIFICATIONS",
|
||||
+1
-1
@@ -8,7 +8,7 @@ from __future__ import annotations
|
||||
|
||||
from typing import Annotated, Any, Literal
|
||||
|
||||
from mcp.types._wire_base import WireModel
|
||||
from mcp_types._wire_base import WireModel
|
||||
from pydantic import ConfigDict, Field, RootModel
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ from __future__ import annotations
|
||||
|
||||
from typing import Annotated, Any, Literal, Union
|
||||
|
||||
from mcp.types._wire_base import WireModel
|
||||
from mcp_types._wire_base import WireModel
|
||||
from pydantic import ConfigDict, Field, RootModel
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
[project]
|
||||
name = "mcp-types"
|
||||
dynamic = ["version"]
|
||||
description = "Model Context Protocol wire types"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
authors = [{ name = "Model Context Protocol a Series of LF Projects, LLC." }]
|
||||
maintainers = [
|
||||
{ name = "David Soria Parra", email = "davidsp@anthropic.com" },
|
||||
{ name = "Marcelo Trylesinski", email = "marcelotryle@gmail.com" },
|
||||
{ name = "Max Isbey", email = "maxisbey@anthropic.com" },
|
||||
{ name = "Felix Weinberger", email = "fweinberger@anthropic.com" },
|
||||
]
|
||||
keywords = ["mcp", "llm", "automation"]
|
||||
license = { text = "MIT" }
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Programming Language :: Python :: 3.14",
|
||||
]
|
||||
dependencies = [
|
||||
"pydantic>=2.12.0",
|
||||
"typing-extensions>=4.13.0",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://modelcontextprotocol.io"
|
||||
Documentation = "https://py.sdk.modelcontextprotocol.io/v2/"
|
||||
Repository = "https://github.com/modelcontextprotocol/python-sdk"
|
||||
Issues = "https://github.com/modelcontextprotocol/python-sdk/issues"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling", "uv-dynamic-versioning"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.version]
|
||||
source = "uv-dynamic-versioning"
|
||||
|
||||
[tool.uv-dynamic-versioning]
|
||||
vcs = "git"
|
||||
style = "pep440"
|
||||
bump = true
|
||||
|
||||
[tool.hatch.build.targets.sdist.force-include]
|
||||
"../../LICENSE" = "LICENSE"
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["mcp_types"]
|
||||
+10
-9
@@ -1,11 +1,4 @@
|
||||
from .client.client import Client
|
||||
from .client.session import ClientSession
|
||||
from .client.session_group import ClientSessionGroup
|
||||
from .client.stdio import StdioServerParameters, stdio_client
|
||||
from .server.session import ServerSession
|
||||
from .server.stdio import stdio_server
|
||||
from .shared.exceptions import MCPDeprecationWarning, MCPError, UrlElicitationRequiredError
|
||||
from .types import (
|
||||
from mcp_types import (
|
||||
CallToolRequest,
|
||||
ClientCapabilities,
|
||||
ClientNotification,
|
||||
@@ -63,7 +56,15 @@ from .types import (
|
||||
ToolUseContent,
|
||||
UnsubscribeRequest,
|
||||
)
|
||||
from .types import Role as SamplingRole
|
||||
from mcp_types import Role as SamplingRole
|
||||
|
||||
from .client.client import Client
|
||||
from .client.session import ClientSession
|
||||
from .client.session_group import ClientSessionGroup
|
||||
from .client.stdio import StdioServerParameters, stdio_client
|
||||
from .server.session import ServerSession
|
||||
from .server.stdio import stdio_server
|
||||
from .shared.exceptions import MCPDeprecationWarning, MCPError, UrlElicitationRequiredError
|
||||
|
||||
__all__ = [
|
||||
"CallToolRequest",
|
||||
|
||||
@@ -6,8 +6,8 @@ from functools import partial
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import anyio
|
||||
import mcp_types as types
|
||||
|
||||
from mcp import types
|
||||
from mcp.client._transport import ReadStream, WriteStream
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.client.sse import sse_client
|
||||
|
||||
@@ -17,17 +17,17 @@ from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from pydantic import ValidationError
|
||||
|
||||
from mcp import types
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.shared.version import (
|
||||
import mcp_types as types
|
||||
from mcp_types import UNSUPPORTED_PROTOCOL_VERSION
|
||||
from mcp_types.version import (
|
||||
HANDSHAKE_PROTOCOL_VERSIONS,
|
||||
LATEST_MODERN_VERSION,
|
||||
MODERN_PROTOCOL_VERSIONS,
|
||||
)
|
||||
from mcp.types import UNSUPPORTED_PROTOCOL_VERSION
|
||||
from pydantic import ValidationError
|
||||
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.shared.exceptions import MCPError
|
||||
|
||||
|
||||
def _parse_supported(data: Any) -> list[str] | None:
|
||||
|
||||
@@ -16,6 +16,7 @@ from urllib.parse import quote, urlencode, urljoin, urlparse
|
||||
|
||||
import anyio
|
||||
import httpx
|
||||
from mcp_types.version import is_version_at_least
|
||||
from pydantic import BaseModel, Field, ValidationError
|
||||
|
||||
from mcp.client.auth.exceptions import OAuthFlowError, OAuthTokenError
|
||||
@@ -54,7 +55,6 @@ from mcp.shared.auth_utils import (
|
||||
resource_url_from_server_url,
|
||||
)
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.shared.version import is_version_at_least
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import re
|
||||
from urllib.parse import urljoin, urlparse
|
||||
|
||||
from httpx import Request, Response
|
||||
from mcp_types import LATEST_PROTOCOL_VERSION
|
||||
from pydantic import AnyUrl, ValidationError
|
||||
|
||||
from mcp.client.auth import OAuthFlowError, OAuthRegistrationError, OAuthTokenError
|
||||
@@ -13,7 +14,6 @@ from mcp.shared.auth import (
|
||||
ProtectedResourceMetadata,
|
||||
)
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.types import LATEST_PROTOCOL_VERSION
|
||||
|
||||
|
||||
def extract_field_from_www_auth(response: Response, field_name: str) -> str | None:
|
||||
|
||||
+17
-17
@@ -8,23 +8,8 @@ from dataclasses import KW_ONLY, dataclass, field
|
||||
from typing import Any, Literal, TypeVar, overload
|
||||
|
||||
import anyio
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp import types
|
||||
from mcp.client._memory import InMemoryTransport
|
||||
from mcp.client._probe import negotiate_auto
|
||||
from mcp.client._transport import Transport
|
||||
from mcp.client.session import ClientSession, ElicitationFnT, ListRootsFnT, LoggingFnT, MessageHandlerFnT, SamplingFnT
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.server import Server
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.server.runner import modern_on_request
|
||||
from mcp.shared.direct_dispatcher import create_direct_dispatcher_pair
|
||||
from mcp.shared.dispatcher import Dispatcher, ProgressFnT
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
from mcp.shared.jsonrpc_dispatcher import JSONRPCDispatcher
|
||||
from mcp.shared.version import HANDSHAKE_PROTOCOL_VERSIONS, MODERN_PROTOCOL_VERSIONS
|
||||
from mcp.types import (
|
||||
import mcp_types as types
|
||||
from mcp_types import (
|
||||
CallToolResult,
|
||||
CompleteResult,
|
||||
EmptyResult,
|
||||
@@ -44,6 +29,21 @@ from mcp.types import (
|
||||
ResourceTemplateReference,
|
||||
ServerCapabilities,
|
||||
)
|
||||
from mcp_types.version import HANDSHAKE_PROTOCOL_VERSIONS, MODERN_PROTOCOL_VERSIONS
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp.client._memory import InMemoryTransport
|
||||
from mcp.client._probe import negotiate_auto
|
||||
from mcp.client._transport import Transport
|
||||
from mcp.client.session import ClientSession, ElicitationFnT, ListRootsFnT, LoggingFnT, MessageHandlerFnT, SamplingFnT
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.server import Server
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.server.runner import modern_on_request
|
||||
from mcp.shared.direct_dispatcher import create_direct_dispatcher_pair
|
||||
from mcp.shared.dispatcher import Dispatcher, ProgressFnT
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
from mcp.shared.jsonrpc_dispatcher import JSONRPCDispatcher
|
||||
|
||||
ConnectMode = Literal["legacy", "auto"] | str
|
||||
"""``mode=`` value: ``"legacy"`` (initialize handshake), ``"auto"`` (discover, fall back to
|
||||
|
||||
+18
-18
@@ -9,10 +9,27 @@ from typing import Any, Literal, Protocol, cast, overload
|
||||
import anyio
|
||||
import anyio.abc
|
||||
import anyio.lowlevel
|
||||
import mcp_types as types
|
||||
from mcp_types import (
|
||||
CLIENT_CAPABILITIES_META_KEY,
|
||||
CLIENT_INFO_META_KEY,
|
||||
INTERNAL_ERROR,
|
||||
METHOD_NOT_FOUND,
|
||||
PROTOCOL_VERSION_META_KEY,
|
||||
UNSUPPORTED_PROTOCOL_VERSION,
|
||||
RequestId,
|
||||
RequestParamsMeta,
|
||||
)
|
||||
from mcp_types import methods as _methods
|
||||
from mcp_types.version import (
|
||||
HANDSHAKE_PROTOCOL_VERSIONS,
|
||||
LATEST_HANDSHAKE_VERSION,
|
||||
LATEST_MODERN_VERSION,
|
||||
MODERN_PROTOCOL_VERSIONS,
|
||||
)
|
||||
from pydantic import BaseModel, TypeAdapter, ValidationError
|
||||
from typing_extensions import Self, TypeVar, deprecated
|
||||
|
||||
from mcp import types
|
||||
from mcp.client._transport import ReadStream, WriteStream
|
||||
from mcp.shared._compat import resync_tracer
|
||||
from mcp.shared.dispatcher import CallOptions, DispatchContext, Dispatcher, ProgressFnT
|
||||
@@ -27,23 +44,6 @@ from mcp.shared.jsonrpc_dispatcher import JSONRPCDispatcher
|
||||
from mcp.shared.message import ClientMessageMetadata, SessionMessage
|
||||
from mcp.shared.session import RequestResponder
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.shared.version import (
|
||||
HANDSHAKE_PROTOCOL_VERSIONS,
|
||||
LATEST_HANDSHAKE_VERSION,
|
||||
LATEST_MODERN_VERSION,
|
||||
MODERN_PROTOCOL_VERSIONS,
|
||||
)
|
||||
from mcp.types import (
|
||||
CLIENT_CAPABILITIES_META_KEY,
|
||||
CLIENT_INFO_META_KEY,
|
||||
INTERNAL_ERROR,
|
||||
METHOD_NOT_FOUND,
|
||||
PROTOCOL_VERSION_META_KEY,
|
||||
UNSUPPORTED_PROTOCOL_VERSION,
|
||||
RequestId,
|
||||
RequestParamsMeta,
|
||||
)
|
||||
from mcp.types import methods as _methods
|
||||
|
||||
DEFAULT_CLIENT_INFO = types.Implementation(name="mcp", version="0.1.0")
|
||||
DISCOVER_TIMEOUT_SECONDS = 10.0
|
||||
|
||||
@@ -15,11 +15,11 @@ from typing import Any, Literal, TypeAlias, overload
|
||||
|
||||
import anyio
|
||||
import httpx
|
||||
import mcp_types as types
|
||||
from pydantic import BaseModel, Field
|
||||
from typing_extensions import Self
|
||||
|
||||
import mcp
|
||||
from mcp import types
|
||||
from mcp.client.session import ElicitationFnT, ListRootsFnT, LoggingFnT, MessageHandlerFnT, SamplingFnT
|
||||
from mcp.client.sse import sse_client
|
||||
from mcp.client.stdio import StdioServerParameters
|
||||
|
||||
@@ -6,10 +6,10 @@ from urllib.parse import parse_qs, urljoin, urlparse
|
||||
|
||||
import anyio
|
||||
import httpx
|
||||
import mcp_types as types
|
||||
from anyio.abc import TaskStatus
|
||||
from httpx_sse import SSEError, aconnect_sse
|
||||
|
||||
from mcp import types
|
||||
from mcp.shared._compat import resync_tracer
|
||||
from mcp.shared._context_streams import create_context_streams
|
||||
from mcp.shared._httpx_utils import McpHttpClientFactory, create_mcp_http_client
|
||||
|
||||
@@ -18,11 +18,11 @@ from typing import Literal, TextIO
|
||||
|
||||
import anyio
|
||||
import anyio.lowlevel
|
||||
import mcp_types as types
|
||||
from anyio.abc import AsyncResource, Process
|
||||
from anyio.streams.text import TextReceiveStream
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from mcp import types
|
||||
from mcp.client._transport import TransportStreams
|
||||
from mcp.os.posix.utilities import terminate_posix_process_tree
|
||||
from mcp.os.win32.utilities import (
|
||||
|
||||
@@ -12,15 +12,7 @@ import anyio
|
||||
import httpx
|
||||
from anyio.abc import TaskGroup
|
||||
from httpx_sse import EventSource, ServerSentEvent, aconnect_sse
|
||||
from pydantic import ValidationError
|
||||
|
||||
from mcp.client._transport import TransportStreams
|
||||
from mcp.shared._compat import resync_tracer
|
||||
from mcp.shared._context_streams import ContextReceiveStream, ContextSendStream, create_context_streams
|
||||
from mcp.shared._httpx_utils import create_mcp_http_client
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.shared.message import ClientMessageMetadata, SessionMessage
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
INTERNAL_ERROR,
|
||||
INVALID_REQUEST,
|
||||
METHOD_NOT_FOUND,
|
||||
@@ -34,6 +26,14 @@ from mcp.types import (
|
||||
RequestId,
|
||||
jsonrpc_message_adapter,
|
||||
)
|
||||
from pydantic import ValidationError
|
||||
|
||||
from mcp.client._transport import TransportStreams
|
||||
from mcp.shared._compat import resync_tracer
|
||||
from mcp.shared._context_streams import ContextReceiveStream, ContextSendStream, create_context_streams
|
||||
from mcp.shared._httpx_utils import create_mcp_http_client
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.shared.message import ClientMessageMetadata, SessionMessage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@ from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from mcp_types import INVALID_PARAMS, CallToolResult
|
||||
from opentelemetry.trace import SpanKind, StatusCode
|
||||
from pydantic import ValidationError
|
||||
|
||||
from mcp.server.context import CallNext, HandlerResult, ServerMiddleware, ServerRequestContext
|
||||
from mcp.shared._otel import extract_trace_context, otel_span
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.types import INVALID_PARAMS, CallToolResult
|
||||
|
||||
|
||||
class OpenTelemetryMiddleware(ServerMiddleware[Any]):
|
||||
|
||||
@@ -19,6 +19,18 @@ from dataclasses import dataclass, field
|
||||
from typing import TYPE_CHECKING, Any, TypeVar
|
||||
|
||||
import anyio
|
||||
from mcp_types import (
|
||||
INTERNAL_ERROR,
|
||||
INVALID_REQUEST,
|
||||
PARSE_ERROR,
|
||||
ClientCapabilities,
|
||||
ErrorData,
|
||||
Implementation,
|
||||
JSONRPCError,
|
||||
JSONRPCRequest,
|
||||
JSONRPCResponse,
|
||||
RequestId,
|
||||
)
|
||||
from pydantic import BaseModel, ValidationError
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import Response
|
||||
@@ -33,18 +45,6 @@ from mcp.shared.inbound import ERROR_CODE_HTTP_STATUS, InboundLadderRejection, c
|
||||
from mcp.shared.jsonrpc_dispatcher import handler_exception_to_error_data
|
||||
from mcp.shared.message import MessageMetadata, ServerMessageMetadata
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.types import (
|
||||
INTERNAL_ERROR,
|
||||
INVALID_REQUEST,
|
||||
PARSE_ERROR,
|
||||
ClientCapabilities,
|
||||
ErrorData,
|
||||
Implementation,
|
||||
JSONRPCError,
|
||||
JSONRPCRequest,
|
||||
JSONRPCResponse,
|
||||
RequestId,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.lowlevel.server import Server
|
||||
|
||||
@@ -25,14 +25,7 @@ from contextlib import AsyncExitStack
|
||||
from typing import Any, TypeVar, overload
|
||||
|
||||
import anyio
|
||||
from pydantic import BaseModel
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp.shared.dispatcher import CallOptions, Outbound
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning, NoBackChannelError
|
||||
from mcp.shared.peer import Meta, dump_params
|
||||
from mcp.shared.version import LATEST_HANDSHAKE_VERSION
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
ClientCapabilities,
|
||||
CreateMessageRequest,
|
||||
CreateMessageResult,
|
||||
@@ -47,7 +40,14 @@ from mcp.types import (
|
||||
PingRequest,
|
||||
Request,
|
||||
)
|
||||
from mcp.types import methods as _methods
|
||||
from mcp_types import methods as _methods
|
||||
from mcp_types.version import LATEST_HANDSHAKE_VERSION
|
||||
from pydantic import BaseModel
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp.shared.dispatcher import CallOptions, Outbound
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning, NoBackChannelError
|
||||
from mcp.shared.peer import Meta, dump_params
|
||||
|
||||
__all__ = ["Connection"]
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ from collections.abc import Awaitable, Callable, Mapping
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Generic, Protocol
|
||||
|
||||
from mcp_types import LoggingLevel, RequestId, RequestParamsMeta
|
||||
from pydantic import BaseModel
|
||||
from typing_extensions import TypeVar, deprecated
|
||||
|
||||
@@ -13,7 +14,6 @@ from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
from mcp.shared.message import CloseSSEStreamCallback
|
||||
from mcp.shared.peer import Meta
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.types import LoggingLevel, RequestId, RequestParamsMeta
|
||||
|
||||
# Invariant: parametrizes a mutable dataclass field; dict default matches the default lifespan.
|
||||
LifespanContextT = TypeVar("LifespanContextT", default=dict[str, Any])
|
||||
|
||||
@@ -4,15 +4,15 @@ from __future__ import annotations
|
||||
|
||||
from typing import Any, Generic, Literal, TypeVar
|
||||
|
||||
from mcp_types import RequestId
|
||||
|
||||
# Internal surface package; imported as the gate's source of truth for spec-valid property schemas.
|
||||
from mcp_types.v2025_11_25 import PrimitiveSchemaDefinition
|
||||
from pydantic import BaseModel, ValidationError
|
||||
from pydantic.json_schema import GenerateJsonSchema, JsonSchemaValue
|
||||
from pydantic_core import core_schema
|
||||
|
||||
from mcp.server.session import ServerSession
|
||||
from mcp.types import RequestId
|
||||
|
||||
# Internal surface package; imported as the gate's source of truth for spec-valid property schemas.
|
||||
from mcp.types.v2025_11_25 import PrimitiveSchemaDefinition
|
||||
|
||||
ElicitSchemaModelT = TypeVar("ElicitSchemaModelT", bound=BaseModel)
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ from dataclasses import dataclass
|
||||
from importlib.metadata import version as importlib_version
|
||||
from typing import Any, Generic
|
||||
|
||||
import mcp_types as types
|
||||
from mcp_types.version import MODERN_PROTOCOL_VERSIONS
|
||||
from pydantic import BaseModel
|
||||
from starlette.applications import Starlette
|
||||
from starlette.middleware import Middleware
|
||||
@@ -50,7 +52,6 @@ from starlette.middleware.authentication import AuthenticationMiddleware
|
||||
from starlette.routing import Mount, Route
|
||||
from typing_extensions import TypeVar
|
||||
|
||||
from mcp import types
|
||||
from mcp.server.auth.middleware.auth_context import AuthContextMiddleware
|
||||
from mcp.server.auth.middleware.bearer_auth import BearerAuthBackend, RequireAuthMiddleware
|
||||
from mcp.server.auth.provider import OAuthAuthorizationServerProvider, TokenVerifier
|
||||
@@ -64,7 +65,6 @@ from mcp.server.streamable_http_manager import StreamableHTTPASGIApp, Streamable
|
||||
from mcp.server.transport_security import TransportSecuritySettings
|
||||
from mcp.shared._stream_protocols import ReadStream, WriteStream
|
||||
from mcp.shared.message import SessionMessage
|
||||
from mcp.shared.version import MODERN_PROTOCOL_VERSIONS
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"""MCPServer - A more ergonomic interface for MCP servers."""
|
||||
|
||||
from mcp.types import Icon
|
||||
from mcp_types import Icon
|
||||
|
||||
from .context import Context
|
||||
from .server import MCPServer
|
||||
|
||||
@@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
from collections.abc import Iterable
|
||||
from typing import TYPE_CHECKING, Any, Generic
|
||||
|
||||
from mcp_types import LoggingLevel
|
||||
from pydantic import AnyUrl, BaseModel
|
||||
from typing_extensions import deprecated
|
||||
|
||||
@@ -16,7 +17,6 @@ from mcp.server.elicitation import (
|
||||
)
|
||||
from mcp.server.lowlevel.helper_types import ReadResourceContents
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
from mcp.types import LoggingLevel
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.mcpserver.server import MCPServer
|
||||
|
||||
@@ -8,12 +8,12 @@ from typing import TYPE_CHECKING, Any, Literal
|
||||
|
||||
import anyio.to_thread
|
||||
import pydantic_core
|
||||
from mcp_types import ContentBlock, Icon, TextContent
|
||||
from pydantic import BaseModel, Field, TypeAdapter, validate_call
|
||||
|
||||
from mcp.server.mcpserver.utilities.context_injection import find_context_parameter, inject_context
|
||||
from mcp.server.mcpserver.utilities.func_metadata import func_metadata
|
||||
from mcp.shared._callable_inspection import is_async_callable
|
||||
from mcp.types import ContentBlock, Icon, TextContent
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.context import LifespanContextT, RequestT
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import abc
|
||||
from typing import Any
|
||||
|
||||
from mcp_types import Annotations, Icon
|
||||
from pydantic import (
|
||||
BaseModel,
|
||||
ConfigDict,
|
||||
@@ -11,8 +12,6 @@ from pydantic import (
|
||||
field_validator,
|
||||
)
|
||||
|
||||
from mcp.types import Annotations, Icon
|
||||
|
||||
|
||||
class Resource(BaseModel, abc.ABC):
|
||||
"""Base class for all resources."""
|
||||
|
||||
@@ -5,13 +5,13 @@ from __future__ import annotations
|
||||
from collections.abc import Callable
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
from mcp_types import Annotations, Icon
|
||||
from pydantic import AnyUrl
|
||||
|
||||
from mcp.server.mcpserver.exceptions import ResourceNotFoundError
|
||||
from mcp.server.mcpserver.resources.base import Resource
|
||||
from mcp.server.mcpserver.resources.templates import ResourceTemplate
|
||||
from mcp.server.mcpserver.utilities.logging import get_logger
|
||||
from mcp.types import Annotations, Icon
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.context import LifespanContextT, RequestT
|
||||
|
||||
@@ -9,6 +9,7 @@ from typing import TYPE_CHECKING, Any
|
||||
from urllib.parse import unquote
|
||||
|
||||
import anyio.to_thread
|
||||
from mcp_types import Annotations, Icon
|
||||
from pydantic import BaseModel, Field, validate_call
|
||||
|
||||
from mcp.server.mcpserver.exceptions import ResourceError
|
||||
@@ -17,7 +18,6 @@ from mcp.server.mcpserver.utilities.context_injection import find_context_parame
|
||||
from mcp.server.mcpserver.utilities.func_metadata import func_metadata
|
||||
from mcp.server.mcpserver.utilities.logging import get_logger
|
||||
from mcp.shared._callable_inspection import is_async_callable
|
||||
from mcp.types import Annotations, Icon
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
@@ -12,11 +12,11 @@ import anyio.to_thread
|
||||
import httpx
|
||||
import pydantic
|
||||
import pydantic_core
|
||||
from mcp_types import Annotations, Icon
|
||||
from pydantic import Field, ValidationInfo, validate_call
|
||||
|
||||
from mcp.server.mcpserver.resources.base import Resource
|
||||
from mcp.shared._callable_inspection import is_async_callable
|
||||
from mcp.types import Annotations, Icon
|
||||
|
||||
|
||||
class TextResource(Resource):
|
||||
|
||||
@@ -11,6 +11,35 @@ from typing import Any, Generic, Literal, TypeVar, overload
|
||||
|
||||
import anyio
|
||||
import pydantic_core
|
||||
from mcp_types import (
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
Annotations,
|
||||
BlobResourceContents,
|
||||
CallToolRequestParams,
|
||||
CallToolResult,
|
||||
CompleteRequestParams,
|
||||
CompleteResult,
|
||||
Completion,
|
||||
GetPromptRequestParams,
|
||||
GetPromptResult,
|
||||
Icon,
|
||||
ListPromptsResult,
|
||||
ListResourcesResult,
|
||||
ListResourceTemplatesResult,
|
||||
ListToolsResult,
|
||||
PaginatedRequestParams,
|
||||
ReadResourceRequestParams,
|
||||
ReadResourceResult,
|
||||
TextContent,
|
||||
TextResourceContents,
|
||||
ToolAnnotations,
|
||||
)
|
||||
from mcp_types import Prompt as MCPPrompt
|
||||
from mcp_types import PromptArgument as MCPPromptArgument
|
||||
from mcp_types import Resource as MCPResource
|
||||
from mcp_types import ResourceTemplate as MCPResourceTemplate
|
||||
from mcp_types import Tool as MCPTool
|
||||
from pydantic.networks import AnyUrl
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from starlette.applications import Starlette
|
||||
@@ -42,35 +71,6 @@ from mcp.server.streamable_http import EventStore
|
||||
from mcp.server.streamable_http_manager import StreamableHTTPSessionManager
|
||||
from mcp.server.transport_security import TransportSecuritySettings
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.types import (
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
Annotations,
|
||||
BlobResourceContents,
|
||||
CallToolRequestParams,
|
||||
CallToolResult,
|
||||
CompleteRequestParams,
|
||||
CompleteResult,
|
||||
Completion,
|
||||
GetPromptRequestParams,
|
||||
GetPromptResult,
|
||||
Icon,
|
||||
ListPromptsResult,
|
||||
ListResourcesResult,
|
||||
ListResourceTemplatesResult,
|
||||
ListToolsResult,
|
||||
PaginatedRequestParams,
|
||||
ReadResourceRequestParams,
|
||||
ReadResourceResult,
|
||||
TextContent,
|
||||
TextResourceContents,
|
||||
ToolAnnotations,
|
||||
)
|
||||
from mcp.types import Prompt as MCPPrompt
|
||||
from mcp.types import PromptArgument as MCPPromptArgument
|
||||
from mcp.types import Resource as MCPResource
|
||||
from mcp.types import ResourceTemplate as MCPResourceTemplate
|
||||
from mcp.types import Tool as MCPTool
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ from collections.abc import Callable
|
||||
from functools import cached_property
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
from mcp_types import Icon, ToolAnnotations
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from mcp.server.mcpserver.exceptions import ToolError
|
||||
@@ -12,7 +13,6 @@ from mcp.server.mcpserver.utilities.func_metadata import FuncMetadata, func_meta
|
||||
from mcp.shared._callable_inspection import is_async_callable
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.shared.tool_name_validation import validate_and_warn_tool_name
|
||||
from mcp.types import Icon, ToolAnnotations
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.context import LifespanContextT, RequestT
|
||||
|
||||
@@ -3,10 +3,11 @@ from __future__ import annotations
|
||||
from collections.abc import Callable
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
from mcp_types import Icon, ToolAnnotations
|
||||
|
||||
from mcp.server.mcpserver.exceptions import ToolError
|
||||
from mcp.server.mcpserver.tools.base import Tool
|
||||
from mcp.server.mcpserver.utilities.logging import get_logger
|
||||
from mcp.types import Icon, ToolAnnotations
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.context import LifespanContextT, RequestT
|
||||
|
||||
@@ -9,6 +9,7 @@ from typing import Annotated, Any, cast, get_args, get_origin, get_type_hints
|
||||
import anyio
|
||||
import anyio.to_thread
|
||||
import pydantic_core
|
||||
from mcp_types import CallToolResult, ContentBlock, TextContent
|
||||
from pydantic import BaseModel, ConfigDict, Field, PydanticUserError, WithJsonSchema, create_model
|
||||
from pydantic.fields import FieldInfo
|
||||
from pydantic.json_schema import GenerateJsonSchema, JsonSchemaWarningKind
|
||||
@@ -24,7 +25,6 @@ from typing_inspection.introspection import (
|
||||
from mcp.server.mcpserver.exceptions import InvalidSignature
|
||||
from mcp.server.mcpserver.utilities.logging import get_logger
|
||||
from mcp.server.mcpserver.utilities.types import Audio, Image
|
||||
from mcp.types import CallToolResult, ContentBlock, TextContent
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import base64
|
||||
from pathlib import Path
|
||||
|
||||
from mcp.types import AudioContent, ImageContent
|
||||
from mcp_types import AudioContent, ImageContent
|
||||
|
||||
|
||||
class Image:
|
||||
|
||||
@@ -2,10 +2,9 @@
|
||||
and tools.
|
||||
"""
|
||||
|
||||
from mcp_types import Icon, ServerCapabilities
|
||||
from pydantic import BaseModel
|
||||
|
||||
from mcp.types import Icon, ServerCapabilities
|
||||
|
||||
|
||||
class InitializationOptions(BaseModel):
|
||||
server_name: str
|
||||
|
||||
+16
-16
@@ -21,6 +21,22 @@ from typing import TYPE_CHECKING, Any, Generic, cast
|
||||
|
||||
import anyio
|
||||
import anyio.abc
|
||||
from mcp_types import (
|
||||
CLIENT_CAPABILITIES_META_KEY,
|
||||
CLIENT_INFO_META_KEY,
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
METHOD_NOT_FOUND,
|
||||
PROTOCOL_VERSION_META_KEY,
|
||||
ErrorData,
|
||||
Implementation,
|
||||
InitializeRequestParams,
|
||||
InitializeResult,
|
||||
RequestParams,
|
||||
RequestParamsMeta,
|
||||
)
|
||||
from mcp_types import methods as _methods
|
||||
from mcp_types.version import HANDSHAKE_PROTOCOL_VERSIONS, LATEST_HANDSHAKE_VERSION, LATEST_MODERN_VERSION
|
||||
from opentelemetry.trace import SpanKind, StatusCode
|
||||
from pydantic import BaseModel, ValidationError
|
||||
from typing_extensions import TypeVar
|
||||
@@ -36,22 +52,6 @@ from mcp.shared.exceptions import MCPError
|
||||
from mcp.shared.jsonrpc_dispatcher import JSONRPCDispatcher
|
||||
from mcp.shared.message import ServerMessageMetadata, SessionMessage
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.shared.version import HANDSHAKE_PROTOCOL_VERSIONS, LATEST_HANDSHAKE_VERSION, LATEST_MODERN_VERSION
|
||||
from mcp.types import (
|
||||
CLIENT_CAPABILITIES_META_KEY,
|
||||
CLIENT_INFO_META_KEY,
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
METHOD_NOT_FOUND,
|
||||
PROTOCOL_VERSION_META_KEY,
|
||||
ErrorData,
|
||||
Implementation,
|
||||
InitializeRequestParams,
|
||||
InitializeResult,
|
||||
RequestParams,
|
||||
RequestParamsMeta,
|
||||
)
|
||||
from mcp.types import methods as _methods
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.lowlevel.server import Server
|
||||
|
||||
@@ -8,16 +8,16 @@ Handlers reach it as `ctx.session` and use the typed helpers (`elicit_form`,
|
||||
|
||||
from typing import Any, TypeVar, overload
|
||||
|
||||
import mcp_types as types
|
||||
from mcp_types import methods as _methods
|
||||
from pydantic import AnyUrl, BaseModel
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp import types
|
||||
from mcp.server.connection import Connection
|
||||
from mcp.server.validation import validate_sampling_tools, validate_tool_use_result_messages
|
||||
from mcp.shared.dispatcher import CallOptions, DispatchContext, ProgressFnT
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
from mcp.shared.message import ServerMessageMetadata
|
||||
from mcp.types import methods as _methods
|
||||
|
||||
__all__ = ["ServerSession"]
|
||||
|
||||
|
||||
@@ -43,13 +43,13 @@ from urllib.parse import quote
|
||||
from uuid import UUID, uuid4
|
||||
|
||||
import anyio
|
||||
import mcp_types as types
|
||||
from pydantic import ValidationError
|
||||
from sse_starlette import EventSourceResponse
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import Response
|
||||
from starlette.types import Receive, Scope, Send
|
||||
|
||||
from mcp import types
|
||||
from mcp.server.auth.middleware.bearer_auth import AuthenticatedUser, AuthorizationContext, authorization_context
|
||||
from mcp.server.transport_security import (
|
||||
TransportSecurityMiddleware,
|
||||
|
||||
@@ -23,8 +23,8 @@ from io import TextIOWrapper
|
||||
|
||||
import anyio
|
||||
import anyio.lowlevel
|
||||
import mcp_types as types
|
||||
|
||||
from mcp import types
|
||||
from mcp.shared._context_streams import create_context_streams
|
||||
from mcp.shared.message import SessionMessage
|
||||
|
||||
|
||||
@@ -19,19 +19,7 @@ from typing import Any, Final
|
||||
import anyio
|
||||
import pydantic_core
|
||||
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
|
||||
from pydantic import ValidationError
|
||||
from sse_starlette import EventSourceResponse
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import Response
|
||||
from starlette.types import Receive, Scope, Send
|
||||
|
||||
from mcp.server.transport_security import TransportSecurityMiddleware, TransportSecuritySettings
|
||||
from mcp.shared._context_streams import ContextReceiveStream, ContextSendStream, create_context_streams
|
||||
from mcp.shared._stream_protocols import ReadStream, WriteStream
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.shared.message import ServerMessageMetadata, SessionMessage
|
||||
from mcp.shared.version import is_version_at_least
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
DEFAULT_NEGOTIATED_VERSION,
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
@@ -45,6 +33,18 @@ from mcp.types import (
|
||||
RequestId,
|
||||
jsonrpc_message_adapter,
|
||||
)
|
||||
from mcp_types.version import is_version_at_least
|
||||
from pydantic import ValidationError
|
||||
from sse_starlette import EventSourceResponse
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import Response
|
||||
from starlette.types import Receive, Scope, Send
|
||||
|
||||
from mcp.server.transport_security import TransportSecurityMiddleware, TransportSecuritySettings
|
||||
from mcp.shared._context_streams import ContextReceiveStream, ContextSendStream, create_context_streams
|
||||
from mcp.shared._stream_protocols import ReadStream, WriteStream
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.shared.message import ServerMessageMetadata, SessionMessage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ from uuid import uuid4
|
||||
|
||||
import anyio
|
||||
from anyio.abc import TaskStatus
|
||||
from mcp_types import DEFAULT_NEGOTIATED_VERSION, INVALID_REQUEST, ErrorData, JSONRPCError
|
||||
from mcp_types.version import HANDSHAKE_PROTOCOL_VERSIONS
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import Response
|
||||
from starlette.types import Receive, Scope, Send
|
||||
@@ -28,8 +30,6 @@ from mcp.shared._compat import resync_tracer
|
||||
from mcp.shared.inbound import MCP_PROTOCOL_VERSION_HEADER
|
||||
from mcp.shared.jsonrpc_dispatcher import JSONRPCDispatcher
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.shared.version import HANDSHAKE_PROTOCOL_VERSIONS
|
||||
from mcp.types import DEFAULT_NEGOTIATED_VERSION, INVALID_REQUEST, ErrorData, JSONRPCError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from mcp.server.lowlevel.server import Server
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
This module provides validation logic for sampling and elicitation requests.
|
||||
"""
|
||||
|
||||
from mcp_types import INVALID_PARAMS, ClientCapabilities, SamplingMessage, Tool, ToolChoice
|
||||
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.types import INVALID_PARAMS, ClientCapabilities, SamplingMessage, Tool, ToolChoice
|
||||
|
||||
|
||||
def check_sampling_tools_capability(client_caps: ClientCapabilities | None) -> bool:
|
||||
|
||||
@@ -13,11 +13,11 @@ from collections.abc import Mapping
|
||||
from typing import Any, Generic
|
||||
|
||||
import anyio
|
||||
from mcp_types import RequestParamsMeta
|
||||
from typing_extensions import TypeVar
|
||||
|
||||
from mcp.shared.dispatcher import CallOptions, DispatchContext
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.types import RequestParamsMeta
|
||||
|
||||
__all__ = ["BaseContext"]
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ from typing import Any
|
||||
|
||||
import anyio
|
||||
import anyio.abc
|
||||
from mcp_types import CONNECTION_CLOSED, INTERNAL_ERROR, INVALID_PARAMS, REQUEST_TIMEOUT, RequestId
|
||||
from pydantic import ValidationError
|
||||
|
||||
from mcp.shared._compat import resync_tracer
|
||||
@@ -31,7 +32,6 @@ from mcp.shared.dispatcher import CallOptions, OnNotify, OnRequest, ProgressFnT
|
||||
from mcp.shared.exceptions import MCPError, NoBackChannelError
|
||||
from mcp.shared.message import MessageMetadata
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.types import CONNECTION_CLOSED, INTERNAL_ERROR, INVALID_PARAMS, REQUEST_TIMEOUT, RequestId
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -21,10 +21,10 @@ from typing import Any, Protocol, TypedDict, TypeVar, runtime_checkable
|
||||
|
||||
import anyio
|
||||
import anyio.abc
|
||||
from mcp_types import RequestId
|
||||
|
||||
from mcp.shared.message import MessageMetadata
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.types import RequestId
|
||||
|
||||
__all__ = [
|
||||
"CallOptions",
|
||||
|
||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
||||
|
||||
from typing import Any, cast
|
||||
|
||||
from mcp.types import INVALID_REQUEST, URL_ELICITATION_REQUIRED, ElicitRequestURLParams, ErrorData, JSONRPCError
|
||||
from mcp_types import INVALID_REQUEST, URL_ELICITATION_REQUIRED, ElicitRequestURLParams, ErrorData, JSONRPCError
|
||||
|
||||
|
||||
class MCPDeprecationWarning(UserWarning):
|
||||
|
||||
@@ -15,14 +15,13 @@ from dataclasses import dataclass
|
||||
from types import MappingProxyType
|
||||
from typing import Any, Final
|
||||
|
||||
from mcp.shared.version import MODERN_PROTOCOL_VERSIONS
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
CLIENT_CAPABILITIES_META_KEY,
|
||||
CLIENT_INFO_META_KEY,
|
||||
PROTOCOL_VERSION_META_KEY,
|
||||
UnsupportedProtocolVersionErrorData,
|
||||
)
|
||||
from mcp.types.jsonrpc import (
|
||||
from mcp_types.jsonrpc import (
|
||||
HEADER_MISMATCH,
|
||||
INVALID_PARAMS,
|
||||
INVALID_REQUEST,
|
||||
@@ -31,6 +30,7 @@ from mcp.types.jsonrpc import (
|
||||
PARSE_ERROR,
|
||||
UNSUPPORTED_PROTOCOL_VERSION,
|
||||
)
|
||||
from mcp_types.version import MODERN_PROTOCOL_VERSIONS
|
||||
|
||||
__all__ = [
|
||||
"ERROR_CODE_HTTP_STATUS",
|
||||
@@ -119,14 +119,14 @@ def classify_inbound_request(
|
||||
|
||||
1. ``params._meta`` is a mapping carrying every reserved envelope key
|
||||
(protocol version, client info, client capabilities) → else
|
||||
:data:`~mcp.types.jsonrpc.INVALID_PARAMS`.
|
||||
:data:`~mcp_types.jsonrpc.INVALID_PARAMS`.
|
||||
2. When ``headers`` is given, its ``MCP-Protocol-Version`` entry equals
|
||||
the envelope's protocol version → else
|
||||
:data:`~mcp.types.jsonrpc.HEADER_MISMATCH`. Runs before the
|
||||
:data:`~mcp_types.jsonrpc.HEADER_MISMATCH`. Runs before the
|
||||
supported-version rung so a client that disagrees with itself is told
|
||||
so, rather than told the body's version is unsupported.
|
||||
3. The envelope's protocol version is in ``supported_modern_versions`` →
|
||||
else :data:`~mcp.types.jsonrpc.UNSUPPORTED_PROTOCOL_VERSION` with
|
||||
else :data:`~mcp_types.jsonrpc.UNSUPPORTED_PROTOCOL_VERSION` with
|
||||
``data = {"supported": [...], "requested": <value>}``.
|
||||
|
||||
Method existence is *not* a rung: kernel dispatch owns that decision so
|
||||
|
||||
@@ -18,6 +18,20 @@ import anyio
|
||||
import anyio.abc
|
||||
import anyio.lowlevel
|
||||
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
|
||||
from mcp_types import (
|
||||
CONNECTION_CLOSED,
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
REQUEST_TIMEOUT,
|
||||
ErrorData,
|
||||
JSONRPCError,
|
||||
JSONRPCMessage,
|
||||
JSONRPCNotification,
|
||||
JSONRPCRequest,
|
||||
JSONRPCResponse,
|
||||
ProgressToken,
|
||||
RequestId,
|
||||
)
|
||||
from opentelemetry.trace import SpanKind
|
||||
from pydantic import ValidationError
|
||||
from typing_extensions import TypeVar
|
||||
@@ -34,20 +48,6 @@ from mcp.shared.message import (
|
||||
SessionMessage,
|
||||
)
|
||||
from mcp.shared.transport_context import TransportContext
|
||||
from mcp.types import (
|
||||
CONNECTION_CLOSED,
|
||||
INTERNAL_ERROR,
|
||||
INVALID_PARAMS,
|
||||
REQUEST_TIMEOUT,
|
||||
ErrorData,
|
||||
JSONRPCError,
|
||||
JSONRPCMessage,
|
||||
JSONRPCNotification,
|
||||
JSONRPCRequest,
|
||||
JSONRPCResponse,
|
||||
ProgressToken,
|
||||
RequestId,
|
||||
)
|
||||
|
||||
__all__ = ["JSONRPCDispatcher", "handler_exception_to_error_data"]
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from collections.abc import Awaitable, Callable
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
|
||||
from mcp.types import JSONRPCMessage, RequestId
|
||||
from mcp_types import JSONRPCMessage, RequestId
|
||||
|
||||
ResumptionToken = str
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ These utilities are primarily intended for client-side usage to properly display
|
||||
human-readable names in user interfaces in a spec-compliant way.
|
||||
"""
|
||||
|
||||
from mcp.types import Implementation, Prompt, Resource, ResourceTemplate, Tool
|
||||
from mcp_types import Implementation, Prompt, Resource, ResourceTemplate, Tool
|
||||
|
||||
|
||||
def get_display_name(obj: Tool | Resource | Prompt | ResourceTemplate | Implementation) -> str:
|
||||
|
||||
@@ -12,12 +12,7 @@ model. Gating (and `NoBackChannelError`) is the wrapped `Outbound`'s job.
|
||||
from collections.abc import Mapping
|
||||
from typing import Any, cast, overload
|
||||
|
||||
from pydantic import BaseModel
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp.shared.dispatcher import CallOptions, Outbound
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
CreateMessageRequestParams,
|
||||
CreateMessageResult,
|
||||
CreateMessageResultWithTools,
|
||||
@@ -34,6 +29,11 @@ from mcp.types import (
|
||||
Tool,
|
||||
ToolChoice,
|
||||
)
|
||||
from pydantic import BaseModel
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from mcp.shared.dispatcher import CallOptions, Outbound
|
||||
from mcp.shared.exceptions import MCPDeprecationWarning
|
||||
|
||||
__all__ = ["ClientPeer", "Meta"]
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
from mcp_types import RequestParamsMeta
|
||||
|
||||
from mcp.shared.dispatcher import ProgressFnT as ProgressFnT
|
||||
from mcp.shared.message import MessageMetadata
|
||||
from mcp.types import RequestParamsMeta
|
||||
|
||||
RequestId = str | int
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@ from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from mcp_types import JSONRPCNotification, JSONRPCRequest
|
||||
|
||||
import mcp.shared.memory
|
||||
from mcp.client._transport import WriteStream
|
||||
from mcp.shared.message import SessionMessage
|
||||
from mcp.types import JSONRPCNotification, JSONRPCRequest
|
||||
|
||||
|
||||
class SpyMemoryObjectSendStream:
|
||||
|
||||
+13
-12
@@ -8,20 +8,10 @@ from contextlib import asynccontextmanager, contextmanager
|
||||
from unittest.mock import patch
|
||||
|
||||
import anyio
|
||||
import mcp_types as types
|
||||
import pytest
|
||||
from inline_snapshot import snapshot
|
||||
|
||||
from mcp import MCPError, types
|
||||
from mcp.client._memory import InMemoryTransport
|
||||
from mcp.client._transport import TransportStreams
|
||||
from mcp.client.client import Client
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.shared.memory import MessageStream, create_client_server_memory_streams
|
||||
from mcp.shared.message import SessionMessage
|
||||
from mcp.shared.version import LATEST_HANDSHAKE_VERSION
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
CallToolResult,
|
||||
EmptyResult,
|
||||
GetPromptResult,
|
||||
@@ -42,6 +32,17 @@ from mcp.types import (
|
||||
Tool,
|
||||
ToolsCapability,
|
||||
)
|
||||
from mcp_types.version import LATEST_HANDSHAKE_VERSION
|
||||
|
||||
from mcp import MCPError
|
||||
from mcp.client._memory import InMemoryTransport
|
||||
from mcp.client._transport import TransportStreams
|
||||
from mcp.client.client import Client
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.shared.memory import MessageStream, create_client_server_memory_streams
|
||||
from mcp.shared.message import SessionMessage
|
||||
from tests.interaction._connect import BASE_URL, mounted_app
|
||||
|
||||
pytestmark = pytest.mark.anyio
|
||||
|
||||
@@ -8,16 +8,16 @@ from collections.abc import AsyncIterator
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
import httpx
|
||||
import mcp_types as types
|
||||
import pytest
|
||||
from mcp_types import TextContent, Tool
|
||||
from starlette.applications import Starlette
|
||||
from starlette.routing import Mount
|
||||
|
||||
from mcp import types
|
||||
from mcp.client.session import ClientSession
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.server.streamable_http_manager import StreamableHTTPSessionManager
|
||||
from mcp.types import TextContent, Tool
|
||||
from tests.interaction.transports import StreamingASGITransport
|
||||
|
||||
# The in-process app is mounted at this origin purely so URLs are well-formed; nothing listens here.
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
from collections.abc import Callable
|
||||
|
||||
import mcp_types as types
|
||||
import pytest
|
||||
from mcp_types import ListToolsResult
|
||||
|
||||
from mcp import Client, types
|
||||
from mcp import Client
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.server.mcpserver import MCPServer
|
||||
from mcp.types import ListToolsResult
|
||||
|
||||
from .conftest import StreamSpyCollection
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import pytest
|
||||
from mcp_types import INVALID_REQUEST, ListRootsResult, Root, TextContent
|
||||
from pydantic import FileUrl
|
||||
|
||||
from mcp import Client
|
||||
from mcp.client import ClientRequestContext
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.shared.exceptions import MCPError
|
||||
from mcp.types import INVALID_REQUEST, ListRootsResult, Root, TextContent
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
from typing import Literal
|
||||
|
||||
import mcp_types as types
|
||||
import pytest
|
||||
|
||||
from mcp import Client, types
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.shared.session import RequestResponder
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
LoggingMessageNotificationParams,
|
||||
TextContent,
|
||||
)
|
||||
|
||||
from mcp import Client
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.shared.session import RequestResponder
|
||||
|
||||
|
||||
class LoggingCollector:
|
||||
def __init__(self):
|
||||
|
||||
@@ -7,16 +7,17 @@ that don't follow SDK conventions.
|
||||
import json
|
||||
|
||||
import httpx
|
||||
import mcp_types as types
|
||||
import pytest
|
||||
from mcp_types import RootsListChangedNotification
|
||||
from starlette.applications import Starlette
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import JSONResponse, Response
|
||||
from starlette.routing import Route
|
||||
|
||||
from mcp import ClientSession, MCPError, types
|
||||
from mcp import ClientSession, MCPError
|
||||
from mcp.client.streamable_http import streamable_http_client
|
||||
from mcp.shared.session import RequestResponder
|
||||
from mcp.types import RootsListChangedNotification
|
||||
|
||||
pytestmark = pytest.mark.anyio
|
||||
|
||||
|
||||
@@ -2,10 +2,7 @@ import logging
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
|
||||
from mcp import Client
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
from mcp.types import (
|
||||
from mcp_types import (
|
||||
CallToolRequestParams,
|
||||
CallToolResult,
|
||||
ListToolsResult,
|
||||
@@ -14,6 +11,9 @@ from mcp.types import (
|
||||
Tool,
|
||||
)
|
||||
|
||||
from mcp import Client
|
||||
from mcp.server import Server, ServerRequestContext
|
||||
|
||||
|
||||
def _make_server(
|
||||
tools: list[Tool],
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user