@sylphai/adal-cli-darwin-arm64 0.2.1 → 0.2.2-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adal-cli.js +552 -564
- package/backend/adal-backend/_internal/Python +0 -0
- package/backend/adal-backend/_internal/Python.framework/Python +0 -0
- package/backend/adal-backend/_internal/Python.framework/Resources/Info.plist +3 -3
- package/backend/adal-backend/_internal/Python.framework/Versions/3.13/Python +0 -0
- package/backend/adal-backend/_internal/Python.framework/Versions/{3.12 → 3.13}/Resources/Info.plist +3 -3
- package/backend/adal-backend/_internal/Python.framework/Versions/Current/Python +0 -0
- package/backend/adal-backend/_internal/Python.framework/Versions/Current/Resources/Info.plist +3 -3
- package/backend/adal-backend/_internal/_cffi_backend.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/aiohttp/_http_parser.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/aiohttp/{_http_writer.cpython-312-darwin.so → _http_writer.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/aiohttp/_websocket/mask.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/aiohttp/_websocket/reader_c.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{attrs-25.3.0.dist-info → attrs-25.4.0.dist-info}/METADATA +63 -60
- package/backend/adal-backend/_internal/{attrs-25.3.0.dist-info → attrs-25.4.0.dist-info}/RECORD +15 -15
- package/backend/adal-backend/_internal/base_library.zip +0 -0
- package/backend/adal-backend/_internal/certifi/cacert.pem +62 -122
- package/backend/adal-backend/_internal/charset_normalizer/{md.cpython-312-darwin.so → md.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/charset_normalizer/md__mypyc.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{click-8.2.1.dist-info → click-8.3.1.dist-info}/METADATA +4 -2
- package/backend/adal-backend/_internal/click-8.3.1.dist-info/RECORD +23 -0
- package/backend/adal-backend/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
- package/backend/adal-backend/_internal/cryptography-46.0.3.dist-info/METADATA +139 -0
- package/backend/adal-backend/_internal/cryptography-46.0.3.dist-info/RECORD +108 -0
- package/backend/adal-backend/_internal/cryptography-46.0.3.dist-info/WHEEL +4 -0
- package/backend/adal-backend/_internal/cryptography-46.0.3.dist-info/licenses/LICENSE +3 -0
- package/backend/adal-backend/_internal/cryptography-46.0.3.dist-info/licenses/LICENSE.APACHE +202 -0
- package/backend/adal-backend/_internal/cryptography-46.0.3.dist-info/licenses/LICENSE.BSD +27 -0
- package/backend/adal-backend/_internal/frozenlist/_frozenlist.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/jiter/jiter.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/libcrypto.3.dylib +0 -0
- package/backend/adal-backend/_internal/liblzma.5.dylib +0 -0
- package/backend/adal-backend/_internal/libmpdec.4.dylib +0 -0
- package/backend/adal-backend/_internal/libsqlite3.dylib +0 -0
- package/backend/adal-backend/_internal/libssl.3.dylib +0 -0
- package/backend/adal-backend/_internal/markupsafe/{_speedups.cpython-312-darwin.so → _speedups.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{MarkupSafe-3.0.2.dist-info → markupsafe-3.0.3.dist-info}/METADATA +15 -33
- package/backend/adal-backend/_internal/markupsafe-3.0.3.dist-info/RECORD +12 -0
- package/backend/adal-backend/_internal/markupsafe-3.0.3.dist-info/WHEEL +6 -0
- package/backend/adal-backend/_internal/{mcp-1.13.1.dist-info → mcp-1.22.0.dist-info}/METADATA +347 -31
- package/backend/adal-backend/_internal/mcp-1.22.0.dist-info/RECORD +94 -0
- package/backend/adal-backend/_internal/multidict/_multidict.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/openai_agents-0.2.11.dist-info/INSTALLER +1 -0
- package/backend/adal-backend/_internal/openai_agents-0.2.11.dist-info/METADATA +352 -0
- package/backend/adal-backend/_internal/openai_agents-0.2.11.dist-info/RECORD +109 -0
- package/backend/adal-backend/_internal/openai_agents-0.2.11.dist-info/WHEEL +4 -0
- package/backend/adal-backend/_internal/openai_agents-0.2.11.dist-info/licenses/LICENSE +21 -0
- package/backend/adal-backend/_internal/propcache/_helpers_c.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/pydantic-2.12.5.dist-info/INSTALLER +1 -0
- package/backend/adal-backend/_internal/pydantic-2.12.5.dist-info/METADATA +1029 -0
- package/backend/adal-backend/_internal/pydantic-2.12.5.dist-info/RECORD +112 -0
- package/backend/adal-backend/_internal/pydantic-2.12.5.dist-info/WHEEL +4 -0
- package/backend/adal-backend/_internal/pydantic-2.12.5.dist-info/licenses/LICENSE +21 -0
- package/backend/adal-backend/_internal/pydantic_core/_pydantic_core.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_asyncio.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_bisect.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_blake2.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_bz2.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_codecs_cn.cpython-312-darwin.so → python3.13/lib-dynload/_codecs_cn.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_codecs_hk.cpython-312-darwin.so → python3.13/lib-dynload/_codecs_hk.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_opcode.cpython-312-darwin.so → python3.13/lib-dynload/_codecs_iso2022.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_codecs_jp.cpython-312-darwin.so → python3.13/lib-dynload/_codecs_jp.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_codecs_kr.cpython-312-darwin.so → python3.13/lib-dynload/_codecs_kr.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_codecs_tw.cpython-312-darwin.so → python3.13/lib-dynload/_codecs_tw.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_contextvars.cpython-312-darwin.so → python3.13/lib-dynload/_contextvars.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_csv.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_ctypes.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_curses.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_datetime.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_decimal.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_elementtree.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_csv.cpython-312-darwin.so → python3.13/lib-dynload/_hashlib.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_statistics.cpython-312-darwin.so → python3.13/lib-dynload/_heapq.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_json.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_lzma.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_md5.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{aiohttp/_websocket/mask.cpython-312-darwin.so → python3.13/lib-dynload/_multibytecodec.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_multiprocessing.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_opcode.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_pickle.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_posixshmem.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_posixsubprocess.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_queue.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_random.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_scproxy.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_sha1.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/syslog.cpython-312-darwin.so → python3.13/lib-dynload/_sha2.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_sha3.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_socket.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_sqlite3.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_ssl.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_statistics.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_struct.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_uuid.cpython-312-darwin.so → python3.13/lib-dynload/_uuid.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/_zoneinfo.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/array.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_scproxy.cpython-312-darwin.so → python3.13/lib-dynload/binascii.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/fcntl.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/grp.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/math.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/mmap.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_zoneinfo.cpython-312-darwin.so → python3.13/lib-dynload/pyexpat.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/readline.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/resource.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/select.cpython-312-darwin.so → python3.13/lib-dynload/select.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/syslog.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/_posixshmem.cpython-312-darwin.so → python3.13/lib-dynload/termios.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/python3.13/lib-dynload/unicodedata.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/{lib-dynload/binascii.cpython-312-darwin.so → python3.13/lib-dynload/zlib.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/regex/_regex.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/rpds/rpds.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/tiktoken/_tiktoken.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/websockets/{speedups.cpython-312-darwin.so → speedups.cpython-313-darwin.so} +0 -0
- package/backend/adal-backend/_internal/websockets-15.0.1.dist-info/RECORD +2 -2
- package/backend/adal-backend/_internal/websockets-15.0.1.dist-info/WHEEL +1 -1
- package/backend/adal-backend/_internal/werkzeug-3.1.4.dist-info/INSTALLER +1 -0
- package/backend/adal-backend/_internal/{werkzeug-3.1.3.dist-info → werkzeug-3.1.4.dist-info}/METADATA +17 -7
- package/backend/adal-backend/_internal/{werkzeug-3.1.3.dist-info → werkzeug-3.1.4.dist-info}/RECORD +29 -29
- package/backend/adal-backend/_internal/{werkzeug-3.1.3.dist-info → werkzeug-3.1.4.dist-info}/WHEEL +1 -1
- package/backend/adal-backend/_internal/yaml/_yaml.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/_internal/yarl/_quoting_c.cpython-313-darwin.so +0 -0
- package/backend/adal-backend/adal-backend +0 -0
- package/package.json +1 -1
- package/backend/adal-backend/_internal/MarkupSafe-3.0.2.dist-info/RECORD +0 -12
- package/backend/adal-backend/_internal/MarkupSafe-3.0.2.dist-info/WHEEL +0 -5
- package/backend/adal-backend/_internal/Python.framework/Versions/3.12/Python +0 -0
- package/backend/adal-backend/_internal/aiohttp/_http_parser.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/aiohttp/_websocket/reader_c.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/charset_normalizer/md__mypyc.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/click-8.2.1.dist-info/RECORD +0 -22
- package/backend/adal-backend/_internal/frozenlist/_frozenlist.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/jiter/jiter.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_asyncio.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_bisect.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_blake2.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_bz2.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_codecs_iso2022.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_ctypes.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_datetime.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_decimal.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_elementtree.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_hashlib.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_heapq.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_json.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_lzma.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_md5.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_multibytecodec.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_multiprocessing.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_pickle.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_posixsubprocess.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_queue.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_random.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_sha1.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_sha2.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_sha3.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_socket.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_sqlite3.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_ssl.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/_struct.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/array.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/fcntl.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/grp.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/math.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/mmap.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/pyexpat.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/readline.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/resource.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/termios.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/unicodedata.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/lib-dynload/zlib.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/mcp-1.13.1.dist-info/RECORD +0 -88
- package/backend/adal-backend/_internal/multidict/_multidict.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/propcache/_helpers_c.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/pydantic_core/_pydantic_core.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/regex/_regex.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/rpds/rpds.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/tiktoken/_tiktoken.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/yaml/_yaml.cpython-312-darwin.so +0 -0
- package/backend/adal-backend/_internal/yarl/_quoting_c.cpython-312-darwin.so +0 -0
- /package/backend/adal-backend/_internal/{MarkupSafe-3.0.2.dist-info → attrs-25.4.0.dist-info}/INSTALLER +0 -0
- /package/backend/adal-backend/_internal/{attrs-25.3.0.dist-info → attrs-25.4.0.dist-info}/WHEEL +0 -0
- /package/backend/adal-backend/_internal/{attrs-25.3.0.dist-info → attrs-25.4.0.dist-info}/licenses/LICENSE +0 -0
- /package/backend/adal-backend/_internal/{attrs-25.3.0.dist-info → click-8.3.1.dist-info}/INSTALLER +0 -0
- /package/backend/adal-backend/_internal/{click-8.2.1.dist-info → click-8.3.1.dist-info}/WHEEL +0 -0
- /package/backend/adal-backend/_internal/{click-8.2.1.dist-info → click-8.3.1.dist-info}/licenses/LICENSE.txt +0 -0
- /package/backend/adal-backend/_internal/{click-8.2.1.dist-info → cryptography-46.0.3.dist-info}/INSTALLER +0 -0
- /package/backend/adal-backend/_internal/jsonschema_specifications/schemas/{draft202012 → draft201909}/vocabularies/format +0 -0
- /package/backend/adal-backend/_internal/{mcp-1.13.1.dist-info → markupsafe-3.0.3.dist-info}/INSTALLER +0 -0
- /package/backend/adal-backend/_internal/{MarkupSafe-3.0.2.dist-info → markupsafe-3.0.3.dist-info/licenses}/LICENSE.txt +0 -0
- /package/backend/adal-backend/_internal/{MarkupSafe-3.0.2.dist-info → markupsafe-3.0.3.dist-info}/top_level.txt +0 -0
- /package/backend/adal-backend/_internal/{werkzeug-3.1.3.dist-info → mcp-1.22.0.dist-info}/INSTALLER +0 -0
- /package/backend/adal-backend/_internal/{mcp-1.13.1.dist-info → mcp-1.22.0.dist-info}/WHEEL +0 -0
- /package/backend/adal-backend/_internal/{mcp-1.13.1.dist-info → mcp-1.22.0.dist-info}/entry_points.txt +0 -0
- /package/backend/adal-backend/_internal/{mcp-1.13.1.dist-info → mcp-1.22.0.dist-info}/licenses/LICENSE +0 -0
- /package/backend/adal-backend/_internal/{werkzeug-3.1.3.dist-info → werkzeug-3.1.4.dist-info/licenses}/LICENSE.txt +0 -0
package/backend/adal-backend/_internal/{mcp-1.13.1.dist-info → mcp-1.22.0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.22.0
|
|
4
4
|
Summary: Model Context Protocol SDK
|
|
5
5
|
Project-URL: Homepage, https://modelcontextprotocol.io
|
|
6
6
|
Project-URL: Repository, https://github.com/modelcontextprotocol/python-sdk
|
|
@@ -25,10 +25,13 @@ Requires-Dist: httpx>=0.27.1
|
|
|
25
25
|
Requires-Dist: jsonschema>=4.20.0
|
|
26
26
|
Requires-Dist: pydantic-settings>=2.5.2
|
|
27
27
|
Requires-Dist: pydantic<3.0.0,>=2.11.0
|
|
28
|
+
Requires-Dist: pyjwt[crypto]>=2.10.1
|
|
28
29
|
Requires-Dist: python-multipart>=0.0.9
|
|
29
30
|
Requires-Dist: pywin32>=310; sys_platform == 'win32'
|
|
30
31
|
Requires-Dist: sse-starlette>=1.6.1
|
|
31
32
|
Requires-Dist: starlette>=0.27
|
|
33
|
+
Requires-Dist: typing-extensions>=4.9.0
|
|
34
|
+
Requires-Dist: typing-inspection>=0.4.1
|
|
32
35
|
Requires-Dist: uvicorn>=0.31.1; sys_platform != 'emscripten'
|
|
33
36
|
Provides-Extra: cli
|
|
34
37
|
Requires-Dist: python-dotenv>=1.0.0; extra == 'cli'
|
|
@@ -49,8 +52,8 @@ Description-Content-Type: text/markdown
|
|
|
49
52
|
[![MIT licensed][mit-badge]][mit-url]
|
|
50
53
|
[![Python Version][python-badge]][python-url]
|
|
51
54
|
[![Documentation][docs-badge]][docs-url]
|
|
55
|
+
[![Protocol][protocol-badge]][protocol-url]
|
|
52
56
|
[![Specification][spec-badge]][spec-url]
|
|
53
|
-
[![GitHub Discussions][discussions-badge]][discussions-url]
|
|
54
57
|
|
|
55
58
|
</div>
|
|
56
59
|
|
|
@@ -72,22 +75,33 @@ Description-Content-Type: text/markdown
|
|
|
72
75
|
- [Prompts](#prompts)
|
|
73
76
|
- [Images](#images)
|
|
74
77
|
- [Context](#context)
|
|
78
|
+
- [Getting Context in Functions](#getting-context-in-functions)
|
|
79
|
+
- [Context Properties and Methods](#context-properties-and-methods)
|
|
75
80
|
- [Completions](#completions)
|
|
76
81
|
- [Elicitation](#elicitation)
|
|
77
82
|
- [Sampling](#sampling)
|
|
78
83
|
- [Logging and Notifications](#logging-and-notifications)
|
|
79
84
|
- [Authentication](#authentication)
|
|
80
85
|
- [FastMCP Properties](#fastmcp-properties)
|
|
81
|
-
- [Session Properties](#session-properties-and-methods)
|
|
86
|
+
- [Session Properties and Methods](#session-properties-and-methods)
|
|
82
87
|
- [Request Context Properties](#request-context-properties)
|
|
83
88
|
- [Running Your Server](#running-your-server)
|
|
84
89
|
- [Development Mode](#development-mode)
|
|
85
90
|
- [Claude Desktop Integration](#claude-desktop-integration)
|
|
86
91
|
- [Direct Execution](#direct-execution)
|
|
87
92
|
- [Streamable HTTP Transport](#streamable-http-transport)
|
|
93
|
+
- [CORS Configuration for Browser-Based Clients](#cors-configuration-for-browser-based-clients)
|
|
88
94
|
- [Mounting to an Existing ASGI Server](#mounting-to-an-existing-asgi-server)
|
|
95
|
+
- [StreamableHTTP servers](#streamablehttp-servers)
|
|
96
|
+
- [Basic mounting](#basic-mounting)
|
|
97
|
+
- [Host-based routing](#host-based-routing)
|
|
98
|
+
- [Multiple servers with path configuration](#multiple-servers-with-path-configuration)
|
|
99
|
+
- [Path configuration at initialization](#path-configuration-at-initialization)
|
|
100
|
+
- [SSE servers](#sse-servers)
|
|
89
101
|
- [Advanced Usage](#advanced-usage)
|
|
90
102
|
- [Low-Level Server](#low-level-server)
|
|
103
|
+
- [Structured Output Support](#structured-output-support)
|
|
104
|
+
- [Pagination (Advanced)](#pagination-advanced)
|
|
91
105
|
- [Writing MCP Clients](#writing-mcp-clients)
|
|
92
106
|
- [Client Display Utilities](#client-display-utilities)
|
|
93
107
|
- [OAuth Authentication for Clients](#oauth-authentication-for-clients)
|
|
@@ -104,12 +118,12 @@ Description-Content-Type: text/markdown
|
|
|
104
118
|
[mit-url]: https://github.com/modelcontextprotocol/python-sdk/blob/main/LICENSE
|
|
105
119
|
[python-badge]: https://img.shields.io/pypi/pyversions/mcp.svg
|
|
106
120
|
[python-url]: https://www.python.org/downloads/
|
|
107
|
-
[docs-badge]: https://img.shields.io/badge/docs-
|
|
108
|
-
[docs-url]: https://modelcontextprotocol.io
|
|
121
|
+
[docs-badge]: https://img.shields.io/badge/docs-python--sdk-blue.svg
|
|
122
|
+
[docs-url]: https://modelcontextprotocol.github.io/python-sdk/
|
|
123
|
+
[protocol-badge]: https://img.shields.io/badge/protocol-modelcontextprotocol.io-blue.svg
|
|
124
|
+
[protocol-url]: https://modelcontextprotocol.io
|
|
109
125
|
[spec-badge]: https://img.shields.io/badge/spec-spec.modelcontextprotocol.io-blue.svg
|
|
110
|
-
[spec-url]: https://
|
|
111
|
-
[discussions-badge]: https://img.shields.io/github/discussions/modelcontextprotocol/python-sdk
|
|
112
|
-
[discussions-url]: https://github.com/modelcontextprotocol/python-sdk/discussions
|
|
126
|
+
[spec-url]: https://modelcontextprotocol.io/specification/latest
|
|
113
127
|
|
|
114
128
|
## Overview
|
|
115
129
|
|
|
@@ -162,14 +176,14 @@ Let's create a simple MCP server that exposes a calculator tool and some data:
|
|
|
162
176
|
"""
|
|
163
177
|
FastMCP quickstart example.
|
|
164
178
|
|
|
165
|
-
|
|
166
|
-
uv run
|
|
179
|
+
Run from the repository root:
|
|
180
|
+
uv run examples/snippets/servers/fastmcp_quickstart.py
|
|
167
181
|
"""
|
|
168
182
|
|
|
169
183
|
from mcp.server.fastmcp import FastMCP
|
|
170
184
|
|
|
171
185
|
# Create an MCP server
|
|
172
|
-
mcp = FastMCP("Demo")
|
|
186
|
+
mcp = FastMCP("Demo", json_response=True)
|
|
173
187
|
|
|
174
188
|
|
|
175
189
|
# Add an addition tool
|
|
@@ -197,23 +211,36 @@ def greet_user(name: str, style: str = "friendly") -> str:
|
|
|
197
211
|
}
|
|
198
212
|
|
|
199
213
|
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
# Run with streamable HTTP transport
|
|
217
|
+
if __name__ == "__main__":
|
|
218
|
+
mcp.run(transport="streamable-http")
|
|
200
219
|
```
|
|
201
220
|
|
|
202
221
|
_Full example: [examples/snippets/servers/fastmcp_quickstart.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/fastmcp_quickstart.py)_
|
|
203
222
|
<!-- /snippet-source -->
|
|
204
223
|
|
|
205
|
-
You can install this server in [Claude
|
|
224
|
+
You can install this server in [Claude Code](https://docs.claude.com/en/docs/claude-code/mcp) and interact with it right away. First, run the server:
|
|
206
225
|
|
|
207
226
|
```bash
|
|
208
|
-
uv run mcp
|
|
227
|
+
uv run --with mcp examples/snippets/servers/fastmcp_quickstart.py
|
|
209
228
|
```
|
|
210
229
|
|
|
211
|
-
|
|
230
|
+
Then add it to Claude Code:
|
|
212
231
|
|
|
213
232
|
```bash
|
|
214
|
-
|
|
233
|
+
claude mcp add --transport http my-server http://localhost:8000/mcp
|
|
215
234
|
```
|
|
216
235
|
|
|
236
|
+
Alternatively, you can test it with the MCP Inspector. Start the server as above, then in a separate terminal:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
npx -y @modelcontextprotocol/inspector
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
In the inspector UI, connect to `http://localhost:8000/mcp`.
|
|
243
|
+
|
|
217
244
|
## What is MCP?
|
|
218
245
|
|
|
219
246
|
The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) lets you build servers that expose data and functionality to LLM applications in a secure, standardized way. Think of it like a web API, but specifically designed for LLM interactions. MCP servers can:
|
|
@@ -413,6 +440,61 @@ causes the tool to be classified as structured _and this is undesirable_,
|
|
|
413
440
|
the classification can be suppressed by passing `structured_output=False`
|
|
414
441
|
to the `@tool` decorator.
|
|
415
442
|
|
|
443
|
+
##### Advanced: Direct CallToolResult
|
|
444
|
+
|
|
445
|
+
For full control over tool responses including the `_meta` field (for passing data to client applications without exposing it to the model), you can return `CallToolResult` directly:
|
|
446
|
+
|
|
447
|
+
<!-- snippet-source examples/snippets/servers/direct_call_tool_result.py -->
|
|
448
|
+
```python
|
|
449
|
+
"""Example showing direct CallToolResult return for advanced control."""
|
|
450
|
+
|
|
451
|
+
from typing import Annotated
|
|
452
|
+
|
|
453
|
+
from pydantic import BaseModel
|
|
454
|
+
|
|
455
|
+
from mcp.server.fastmcp import FastMCP
|
|
456
|
+
from mcp.types import CallToolResult, TextContent
|
|
457
|
+
|
|
458
|
+
mcp = FastMCP("CallToolResult Example")
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
class ValidationModel(BaseModel):
|
|
462
|
+
"""Model for validating structured output."""
|
|
463
|
+
|
|
464
|
+
status: str
|
|
465
|
+
data: dict[str, int]
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
@mcp.tool()
|
|
469
|
+
def advanced_tool() -> CallToolResult:
|
|
470
|
+
"""Return CallToolResult directly for full control including _meta field."""
|
|
471
|
+
return CallToolResult(
|
|
472
|
+
content=[TextContent(type="text", text="Response visible to the model")],
|
|
473
|
+
_meta={"hidden": "data for client applications only"},
|
|
474
|
+
)
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
@mcp.tool()
|
|
478
|
+
def validated_tool() -> Annotated[CallToolResult, ValidationModel]:
|
|
479
|
+
"""Return CallToolResult with structured output validation."""
|
|
480
|
+
return CallToolResult(
|
|
481
|
+
content=[TextContent(type="text", text="Validated response")],
|
|
482
|
+
structuredContent={"status": "success", "data": {"result": 42}},
|
|
483
|
+
_meta={"internal": "metadata"},
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
@mcp.tool()
|
|
488
|
+
def empty_result_tool() -> CallToolResult:
|
|
489
|
+
"""For empty results, return CallToolResult with empty content."""
|
|
490
|
+
return CallToolResult(content=[])
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
_Full example: [examples/snippets/servers/direct_call_tool_result.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/direct_call_tool_result.py)_
|
|
494
|
+
<!-- /snippet-source -->
|
|
495
|
+
|
|
496
|
+
**Important:** `CallToolResult` must always be returned (no `Optional` or `Union`). For empty results, use `CallToolResult(content=[])`. For optional simple types, use `str | None` without `CallToolResult`.
|
|
497
|
+
|
|
416
498
|
<!-- snippet-source examples/snippets/servers/structured_output.py -->
|
|
417
499
|
```python
|
|
418
500
|
"""Example showing structured output with tools."""
|
|
@@ -441,7 +523,7 @@ def get_weather(city: str) -> WeatherData:
|
|
|
441
523
|
"""Get weather for a city - returns structured data."""
|
|
442
524
|
# Simulated weather data
|
|
443
525
|
return WeatherData(
|
|
444
|
-
temperature=
|
|
526
|
+
temperature=22.5,
|
|
445
527
|
humidity=45.0,
|
|
446
528
|
condition="sunny",
|
|
447
529
|
wind_speed=5.2,
|
|
@@ -546,6 +628,41 @@ def debug_error(error: str) -> list[base.Message]:
|
|
|
546
628
|
_Full example: [examples/snippets/servers/basic_prompt.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/basic_prompt.py)_
|
|
547
629
|
<!-- /snippet-source -->
|
|
548
630
|
|
|
631
|
+
### Icons
|
|
632
|
+
|
|
633
|
+
MCP servers can provide icons for UI display. Icons can be added to the server implementation, tools, resources, and prompts:
|
|
634
|
+
|
|
635
|
+
```python
|
|
636
|
+
from mcp.server.fastmcp import FastMCP, Icon
|
|
637
|
+
|
|
638
|
+
# Create an icon from a file path or URL
|
|
639
|
+
icon = Icon(
|
|
640
|
+
src="icon.png",
|
|
641
|
+
mimeType="image/png",
|
|
642
|
+
sizes="64x64"
|
|
643
|
+
)
|
|
644
|
+
|
|
645
|
+
# Add icons to server
|
|
646
|
+
mcp = FastMCP(
|
|
647
|
+
"My Server",
|
|
648
|
+
website_url="https://example.com",
|
|
649
|
+
icons=[icon]
|
|
650
|
+
)
|
|
651
|
+
|
|
652
|
+
# Add icons to tools, resources, and prompts
|
|
653
|
+
@mcp.tool(icons=[icon])
|
|
654
|
+
def my_tool():
|
|
655
|
+
"""Tool with an icon."""
|
|
656
|
+
return "result"
|
|
657
|
+
|
|
658
|
+
@mcp.resource("demo://resource", icons=[icon])
|
|
659
|
+
def my_resource():
|
|
660
|
+
"""Resource with an icon."""
|
|
661
|
+
return "content"
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
_Full example: [examples/fastmcp/icons_demo.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/fastmcp/icons_demo.py)_
|
|
665
|
+
|
|
549
666
|
### Images
|
|
550
667
|
|
|
551
668
|
FastMCP provides an `Image` class that automatically handles image data:
|
|
@@ -777,6 +894,8 @@ async def book_table(date: str, time: str, party_size: int, ctx: Context[ServerS
|
|
|
777
894
|
_Full example: [examples/snippets/servers/elicitation.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/elicitation.py)_
|
|
778
895
|
<!-- /snippet-source -->
|
|
779
896
|
|
|
897
|
+
Elicitation schemas support default values for all field types. Default values are automatically included in the JSON schema sent to clients, allowing them to pre-populate forms.
|
|
898
|
+
|
|
780
899
|
The `elicit()` method returns an `ElicitationResult` with:
|
|
781
900
|
|
|
782
901
|
- `action`: "accept", "decline", or "cancel"
|
|
@@ -881,6 +1000,7 @@ class SimpleTokenVerifier(TokenVerifier):
|
|
|
881
1000
|
# Create FastMCP instance as a Resource Server
|
|
882
1001
|
mcp = FastMCP(
|
|
883
1002
|
"Weather Service",
|
|
1003
|
+
json_response=True,
|
|
884
1004
|
# Token verifier for authentication
|
|
885
1005
|
token_verifier=SimpleTokenVerifier(),
|
|
886
1006
|
# Auth settings for RFC 9728 Protected Resource Metadata
|
|
@@ -926,6 +1046,8 @@ The FastMCP server instance accessible via `ctx.fastmcp` provides access to serv
|
|
|
926
1046
|
|
|
927
1047
|
- `ctx.fastmcp.name` - The server's name as defined during initialization
|
|
928
1048
|
- `ctx.fastmcp.instructions` - Server instructions/description provided to clients
|
|
1049
|
+
- `ctx.fastmcp.website_url` - Optional website URL for the server
|
|
1050
|
+
- `ctx.fastmcp.icons` - Optional list of icons for UI display
|
|
929
1051
|
- `ctx.fastmcp.settings` - Complete server configuration object containing:
|
|
930
1052
|
- `debug` - Debug mode flag
|
|
931
1053
|
- `log_level` - Current logging level
|
|
@@ -1094,7 +1216,7 @@ Note that `uv run mcp run` or `uv run mcp dev` only supports server using FastMC
|
|
|
1094
1216
|
|
|
1095
1217
|
### Streamable HTTP Transport
|
|
1096
1218
|
|
|
1097
|
-
> **Note**: Streamable HTTP transport is
|
|
1219
|
+
> **Note**: Streamable HTTP transport is the recommended transport for production deployments. Use `stateless_http=True` and `json_response=True` for optimal scalability.
|
|
1098
1220
|
|
|
1099
1221
|
<!-- snippet-source examples/snippets/servers/streamable_config.py -->
|
|
1100
1222
|
```python
|
|
@@ -1105,15 +1227,15 @@ Run from the repository root:
|
|
|
1105
1227
|
|
|
1106
1228
|
from mcp.server.fastmcp import FastMCP
|
|
1107
1229
|
|
|
1108
|
-
#
|
|
1109
|
-
mcp = FastMCP("
|
|
1230
|
+
# Stateless server with JSON responses (recommended)
|
|
1231
|
+
mcp = FastMCP("StatelessServer", stateless_http=True, json_response=True)
|
|
1110
1232
|
|
|
1111
1233
|
# Other configuration options:
|
|
1112
|
-
# Stateless server
|
|
1234
|
+
# Stateless server with SSE streaming responses
|
|
1113
1235
|
# mcp = FastMCP("StatelessServer", stateless_http=True)
|
|
1114
1236
|
|
|
1115
|
-
#
|
|
1116
|
-
# mcp = FastMCP("
|
|
1237
|
+
# Stateful server with session persistence
|
|
1238
|
+
# mcp = FastMCP("StatefulServer")
|
|
1117
1239
|
|
|
1118
1240
|
|
|
1119
1241
|
# Add a simple tool to demonstrate the server
|
|
@@ -1148,7 +1270,7 @@ from starlette.routing import Mount
|
|
|
1148
1270
|
from mcp.server.fastmcp import FastMCP
|
|
1149
1271
|
|
|
1150
1272
|
# Create the Echo server
|
|
1151
|
-
echo_mcp = FastMCP(name="EchoServer", stateless_http=True)
|
|
1273
|
+
echo_mcp = FastMCP(name="EchoServer", stateless_http=True, json_response=True)
|
|
1152
1274
|
|
|
1153
1275
|
|
|
1154
1276
|
@echo_mcp.tool()
|
|
@@ -1158,7 +1280,7 @@ def echo(message: str) -> str:
|
|
|
1158
1280
|
|
|
1159
1281
|
|
|
1160
1282
|
# Create the Math server
|
|
1161
|
-
math_mcp = FastMCP(name="MathServer", stateless_http=True)
|
|
1283
|
+
math_mcp = FastMCP(name="MathServer", stateless_http=True, json_response=True)
|
|
1162
1284
|
|
|
1163
1285
|
|
|
1164
1286
|
@math_mcp.tool()
|
|
@@ -1259,7 +1381,7 @@ from starlette.routing import Mount
|
|
|
1259
1381
|
from mcp.server.fastmcp import FastMCP
|
|
1260
1382
|
|
|
1261
1383
|
# Create MCP server
|
|
1262
|
-
mcp = FastMCP("My App")
|
|
1384
|
+
mcp = FastMCP("My App", json_response=True)
|
|
1263
1385
|
|
|
1264
1386
|
|
|
1265
1387
|
@mcp.tool()
|
|
@@ -1296,7 +1418,7 @@ from starlette.routing import Host
|
|
|
1296
1418
|
from mcp.server.fastmcp import FastMCP
|
|
1297
1419
|
|
|
1298
1420
|
# Create MCP server
|
|
1299
|
-
mcp = FastMCP("MCP Host App")
|
|
1421
|
+
mcp = FastMCP("MCP Host App", json_response=True)
|
|
1300
1422
|
|
|
1301
1423
|
|
|
1302
1424
|
@mcp.tool()
|
|
@@ -1333,8 +1455,8 @@ from starlette.routing import Mount
|
|
|
1333
1455
|
from mcp.server.fastmcp import FastMCP
|
|
1334
1456
|
|
|
1335
1457
|
# Create multiple MCP servers
|
|
1336
|
-
api_mcp = FastMCP("API Server")
|
|
1337
|
-
chat_mcp = FastMCP("Chat Server")
|
|
1458
|
+
api_mcp = FastMCP("API Server", json_response=True)
|
|
1459
|
+
chat_mcp = FastMCP("Chat Server", json_response=True)
|
|
1338
1460
|
|
|
1339
1461
|
|
|
1340
1462
|
@api_mcp.tool()
|
|
@@ -1384,7 +1506,11 @@ from mcp.server.fastmcp import FastMCP
|
|
|
1384
1506
|
|
|
1385
1507
|
# Configure streamable_http_path during initialization
|
|
1386
1508
|
# This server will mount at the root of wherever it's mounted
|
|
1387
|
-
mcp_at_root = FastMCP(
|
|
1509
|
+
mcp_at_root = FastMCP(
|
|
1510
|
+
"My Server",
|
|
1511
|
+
json_response=True,
|
|
1512
|
+
streamable_http_path="/",
|
|
1513
|
+
)
|
|
1388
1514
|
|
|
1389
1515
|
|
|
1390
1516
|
@mcp_at_root.tool()
|
|
@@ -1760,14 +1886,203 @@ if __name__ == "__main__":
|
|
|
1760
1886
|
_Full example: [examples/snippets/servers/lowlevel/structured_output.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lowlevel/structured_output.py)_
|
|
1761
1887
|
<!-- /snippet-source -->
|
|
1762
1888
|
|
|
1763
|
-
Tools can return data in
|
|
1889
|
+
Tools can return data in four ways:
|
|
1764
1890
|
|
|
1765
1891
|
1. **Content only**: Return a list of content blocks (default behavior before spec revision 2025-06-18)
|
|
1766
1892
|
2. **Structured data only**: Return a dictionary that will be serialized to JSON (Introduced in spec revision 2025-06-18)
|
|
1767
1893
|
3. **Both**: Return a tuple of (content, structured_data) preferred option to use for backwards compatibility
|
|
1894
|
+
4. **Direct CallToolResult**: Return `CallToolResult` directly for full control (including `_meta` field)
|
|
1768
1895
|
|
|
1769
1896
|
When an `outputSchema` is defined, the server automatically validates the structured output against the schema. This ensures type safety and helps catch errors early.
|
|
1770
1897
|
|
|
1898
|
+
##### Returning CallToolResult Directly
|
|
1899
|
+
|
|
1900
|
+
For full control over the response including the `_meta` field (for passing data to client applications without exposing it to the model), return `CallToolResult` directly:
|
|
1901
|
+
|
|
1902
|
+
<!-- snippet-source examples/snippets/servers/lowlevel/direct_call_tool_result.py -->
|
|
1903
|
+
```python
|
|
1904
|
+
"""
|
|
1905
|
+
Run from the repository root:
|
|
1906
|
+
uv run examples/snippets/servers/lowlevel/direct_call_tool_result.py
|
|
1907
|
+
"""
|
|
1908
|
+
|
|
1909
|
+
import asyncio
|
|
1910
|
+
from typing import Any
|
|
1911
|
+
|
|
1912
|
+
import mcp.server.stdio
|
|
1913
|
+
import mcp.types as types
|
|
1914
|
+
from mcp.server.lowlevel import NotificationOptions, Server
|
|
1915
|
+
from mcp.server.models import InitializationOptions
|
|
1916
|
+
|
|
1917
|
+
server = Server("example-server")
|
|
1918
|
+
|
|
1919
|
+
|
|
1920
|
+
@server.list_tools()
|
|
1921
|
+
async def list_tools() -> list[types.Tool]:
|
|
1922
|
+
"""List available tools."""
|
|
1923
|
+
return [
|
|
1924
|
+
types.Tool(
|
|
1925
|
+
name="advanced_tool",
|
|
1926
|
+
description="Tool with full control including _meta field",
|
|
1927
|
+
inputSchema={
|
|
1928
|
+
"type": "object",
|
|
1929
|
+
"properties": {"message": {"type": "string"}},
|
|
1930
|
+
"required": ["message"],
|
|
1931
|
+
},
|
|
1932
|
+
)
|
|
1933
|
+
]
|
|
1934
|
+
|
|
1935
|
+
|
|
1936
|
+
@server.call_tool()
|
|
1937
|
+
async def handle_call_tool(name: str, arguments: dict[str, Any]) -> types.CallToolResult:
|
|
1938
|
+
"""Handle tool calls by returning CallToolResult directly."""
|
|
1939
|
+
if name == "advanced_tool":
|
|
1940
|
+
message = str(arguments.get("message", ""))
|
|
1941
|
+
return types.CallToolResult(
|
|
1942
|
+
content=[types.TextContent(type="text", text=f"Processed: {message}")],
|
|
1943
|
+
structuredContent={"result": "success", "message": message},
|
|
1944
|
+
_meta={"hidden": "data for client applications only"},
|
|
1945
|
+
)
|
|
1946
|
+
|
|
1947
|
+
raise ValueError(f"Unknown tool: {name}")
|
|
1948
|
+
|
|
1949
|
+
|
|
1950
|
+
async def run():
|
|
1951
|
+
"""Run the server."""
|
|
1952
|
+
async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
|
|
1953
|
+
await server.run(
|
|
1954
|
+
read_stream,
|
|
1955
|
+
write_stream,
|
|
1956
|
+
InitializationOptions(
|
|
1957
|
+
server_name="example",
|
|
1958
|
+
server_version="0.1.0",
|
|
1959
|
+
capabilities=server.get_capabilities(
|
|
1960
|
+
notification_options=NotificationOptions(),
|
|
1961
|
+
experimental_capabilities={},
|
|
1962
|
+
),
|
|
1963
|
+
),
|
|
1964
|
+
)
|
|
1965
|
+
|
|
1966
|
+
|
|
1967
|
+
if __name__ == "__main__":
|
|
1968
|
+
asyncio.run(run())
|
|
1969
|
+
```
|
|
1970
|
+
|
|
1971
|
+
_Full example: [examples/snippets/servers/lowlevel/direct_call_tool_result.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/lowlevel/direct_call_tool_result.py)_
|
|
1972
|
+
<!-- /snippet-source -->
|
|
1973
|
+
|
|
1974
|
+
**Note:** When returning `CallToolResult`, you bypass the automatic content/structured conversion. You must construct the complete response yourself.
|
|
1975
|
+
|
|
1976
|
+
### Pagination (Advanced)
|
|
1977
|
+
|
|
1978
|
+
For servers that need to handle large datasets, the low-level server provides paginated versions of list operations. This is an optional optimization - most servers won't need pagination unless they're dealing with hundreds or thousands of items.
|
|
1979
|
+
|
|
1980
|
+
#### Server-side Implementation
|
|
1981
|
+
|
|
1982
|
+
<!-- snippet-source examples/snippets/servers/pagination_example.py -->
|
|
1983
|
+
```python
|
|
1984
|
+
"""
|
|
1985
|
+
Example of implementing pagination with MCP server decorators.
|
|
1986
|
+
"""
|
|
1987
|
+
|
|
1988
|
+
from pydantic import AnyUrl
|
|
1989
|
+
|
|
1990
|
+
import mcp.types as types
|
|
1991
|
+
from mcp.server.lowlevel import Server
|
|
1992
|
+
|
|
1993
|
+
# Initialize the server
|
|
1994
|
+
server = Server("paginated-server")
|
|
1995
|
+
|
|
1996
|
+
# Sample data to paginate
|
|
1997
|
+
ITEMS = [f"Item {i}" for i in range(1, 101)] # 100 items
|
|
1998
|
+
|
|
1999
|
+
|
|
2000
|
+
@server.list_resources()
|
|
2001
|
+
async def list_resources_paginated(request: types.ListResourcesRequest) -> types.ListResourcesResult:
|
|
2002
|
+
"""List resources with pagination support."""
|
|
2003
|
+
page_size = 10
|
|
2004
|
+
|
|
2005
|
+
# Extract cursor from request params
|
|
2006
|
+
cursor = request.params.cursor if request.params is not None else None
|
|
2007
|
+
|
|
2008
|
+
# Parse cursor to get offset
|
|
2009
|
+
start = 0 if cursor is None else int(cursor)
|
|
2010
|
+
end = start + page_size
|
|
2011
|
+
|
|
2012
|
+
# Get page of resources
|
|
2013
|
+
page_items = [
|
|
2014
|
+
types.Resource(uri=AnyUrl(f"resource://items/{item}"), name=item, description=f"Description for {item}")
|
|
2015
|
+
for item in ITEMS[start:end]
|
|
2016
|
+
]
|
|
2017
|
+
|
|
2018
|
+
# Determine next cursor
|
|
2019
|
+
next_cursor = str(end) if end < len(ITEMS) else None
|
|
2020
|
+
|
|
2021
|
+
return types.ListResourcesResult(resources=page_items, nextCursor=next_cursor)
|
|
2022
|
+
```
|
|
2023
|
+
|
|
2024
|
+
_Full example: [examples/snippets/servers/pagination_example.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/pagination_example.py)_
|
|
2025
|
+
<!-- /snippet-source -->
|
|
2026
|
+
|
|
2027
|
+
#### Client-side Consumption
|
|
2028
|
+
|
|
2029
|
+
<!-- snippet-source examples/snippets/clients/pagination_client.py -->
|
|
2030
|
+
```python
|
|
2031
|
+
"""
|
|
2032
|
+
Example of consuming paginated MCP endpoints from a client.
|
|
2033
|
+
"""
|
|
2034
|
+
|
|
2035
|
+
import asyncio
|
|
2036
|
+
|
|
2037
|
+
from mcp.client.session import ClientSession
|
|
2038
|
+
from mcp.client.stdio import StdioServerParameters, stdio_client
|
|
2039
|
+
from mcp.types import PaginatedRequestParams, Resource
|
|
2040
|
+
|
|
2041
|
+
|
|
2042
|
+
async def list_all_resources() -> None:
|
|
2043
|
+
"""Fetch all resources using pagination."""
|
|
2044
|
+
async with stdio_client(StdioServerParameters(command="uv", args=["run", "mcp-simple-pagination"])) as (
|
|
2045
|
+
read,
|
|
2046
|
+
write,
|
|
2047
|
+
):
|
|
2048
|
+
async with ClientSession(read, write) as session:
|
|
2049
|
+
await session.initialize()
|
|
2050
|
+
|
|
2051
|
+
all_resources: list[Resource] = []
|
|
2052
|
+
cursor = None
|
|
2053
|
+
|
|
2054
|
+
while True:
|
|
2055
|
+
# Fetch a page of resources
|
|
2056
|
+
result = await session.list_resources(params=PaginatedRequestParams(cursor=cursor))
|
|
2057
|
+
all_resources.extend(result.resources)
|
|
2058
|
+
|
|
2059
|
+
print(f"Fetched {len(result.resources)} resources")
|
|
2060
|
+
|
|
2061
|
+
# Check if there are more pages
|
|
2062
|
+
if result.nextCursor:
|
|
2063
|
+
cursor = result.nextCursor
|
|
2064
|
+
else:
|
|
2065
|
+
break
|
|
2066
|
+
|
|
2067
|
+
print(f"Total resources: {len(all_resources)}")
|
|
2068
|
+
|
|
2069
|
+
|
|
2070
|
+
if __name__ == "__main__":
|
|
2071
|
+
asyncio.run(list_all_resources())
|
|
2072
|
+
```
|
|
2073
|
+
|
|
2074
|
+
_Full example: [examples/snippets/clients/pagination_client.py](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/pagination_client.py)_
|
|
2075
|
+
<!-- /snippet-source -->
|
|
2076
|
+
|
|
2077
|
+
#### Key Points
|
|
2078
|
+
|
|
2079
|
+
- **Cursors are opaque strings** - the server defines the format (numeric offsets, timestamps, etc.)
|
|
2080
|
+
- **Return `nextCursor=None`** when there are no more pages
|
|
2081
|
+
- **Backward compatible** - clients that don't support pagination will still work (they'll just get the first page)
|
|
2082
|
+
- **Flexible page sizes** - Each endpoint can define its own page size based on data characteristics
|
|
2083
|
+
|
|
2084
|
+
See the [simple-pagination example](examples/servers/simple-pagination) for a complete implementation.
|
|
2085
|
+
|
|
1771
2086
|
### Writing MCP Clients
|
|
1772
2087
|
|
|
1773
2088
|
The SDK provides a high-level client interface for connecting to MCP servers using various [transports](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports):
|
|
@@ -2178,8 +2493,9 @@ MCP servers declare capabilities during initialization:
|
|
|
2178
2493
|
|
|
2179
2494
|
## Documentation
|
|
2180
2495
|
|
|
2496
|
+
- [API Reference](https://modelcontextprotocol.github.io/python-sdk/api/)
|
|
2181
2497
|
- [Model Context Protocol documentation](https://modelcontextprotocol.io)
|
|
2182
|
-
- [Model Context Protocol specification](https://
|
|
2498
|
+
- [Model Context Protocol specification](https://modelcontextprotocol.io/specification/latest)
|
|
2183
2499
|
- [Officially supported servers](https://github.com/modelcontextprotocol/servers)
|
|
2184
2500
|
|
|
2185
2501
|
## Contributing
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
../../../bin/mcp,sha256=Z0vNNqRL3qPSs3mvhzHrDW9DQDzsGauLs3cVDVuSNy8,247
|
|
2
|
+
mcp/__init__.py,sha256=gQWhSmjAxSrOI_hqwvA58dofOOD_0aS419CPx17RQQU,2680
|
|
3
|
+
mcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
mcp/types.py,sha256=HBZVlCnm9Y3qeyteTKXLn0UvgP1Tz9ChIwzlcNNFM1A,44442
|
|
5
|
+
mcp/cli/__init__.py,sha256=NJrJIUQmjc6FtSxvGNt1zeXnSLj8-Mli86laODTtQzE,107
|
|
6
|
+
mcp/cli/claude.py,sha256=MKUuZGrBmMSslD2weLIxU7RdQXZl2OvuMMq-_-EAlgY,5086
|
|
7
|
+
mcp/cli/cli.py,sha256=w6mWBmcy4y7nxLQDa4qSbxKV0BWeJqU_SFZf3qdOubs,15179
|
|
8
|
+
mcp/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
mcp/client/__main__.py,sha256=_aXYJ3xJiQGURxEEfvV-4MAqxRJwIFptFaLHyJgfvRU,2588
|
|
10
|
+
mcp/client/session.py,sha256=ybK8uuWEpgRY09rJoEYJrG6Me0sNAi9KQ8Z6MeCi6ko,20741
|
|
11
|
+
mcp/client/session_group.py,sha256=FpkuYSpT2Wm7xYE8TssG7Ae3AYcF-oED9eNAPD7uF7M,17072
|
|
12
|
+
mcp/client/sse.py,sha256=SqdJSPRBZaakHDXGDvcem20Hl3LMXjRF6JlWpVL4Xzw,7337
|
|
13
|
+
mcp/client/streamable_http.py,sha256=sGPgZk7aRbeefAaXXnBIVT-v5CdBmvJmlLQ6JfnME6c,20504
|
|
14
|
+
mcp/client/websocket.py,sha256=mH6zD_nRnMr11uSFdDTy2TZ2YeS9S18v-JJ2rQ7tXck,3486
|
|
15
|
+
mcp/client/auth/__init__.py,sha256=hvlPclaDk3EkHr_nrt6tx37iv_rQ8SQgosM0OhJSeQ4,488
|
|
16
|
+
mcp/client/auth/exceptions.py,sha256=uUDHX_P0S3R_tt7oAS8ALQrUgOiV2Dgc0QQAdaaBcW8,264
|
|
17
|
+
mcp/client/auth/oauth2.py,sha256=-0sEyFlj99pV6FAHu_POiRGMF4OuyfkKm4Enfo4Vixg,24372
|
|
18
|
+
mcp/client/auth/utils.py,sha256=NTaMArsn-UF6L-SWWvI0JKNWEORJV-mpJPyDUYzz3fQ,9893
|
|
19
|
+
mcp/client/auth/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
mcp/client/auth/extensions/client_credentials.py,sha256=7M34RJ0NHpF4OKM6em875fLdgErf2KjtB-7nSfBBaVE,7118
|
|
21
|
+
mcp/client/stdio/__init__.py,sha256=ojInz-HjRW8Wq0ExFIajmc9Uf8xrZFOZv5vzptxs9lQ,9403
|
|
22
|
+
mcp/os/__init__.py,sha256=uqaGIfCF4I0IPeSsEEZMNwZuDF91U0WKAIbDcKzPRLo,43
|
|
23
|
+
mcp/os/posix/__init__.py,sha256=l_2j8jhhgw69s_-eH4dCDk4QYxNlxKGIpaOCvcbv1Qk,40
|
|
24
|
+
mcp/os/posix/utilities.py,sha256=mTEYV74M9z9s2deXWctpUGTS1MNtkOr7IYCXU3mxlNI,1930
|
|
25
|
+
mcp/os/win32/__init__.py,sha256=7xyI7KWpZhDS3omGEBcu3200Q-DjIsS7c-a-vrn28Y4,42
|
|
26
|
+
mcp/os/win32/utilities.py,sha256=M5j9NF9QhgCHqQeHYpc9z0ksFsNy1F43vYqQl3LXq-Y,10808
|
|
27
|
+
mcp/server/__init__.py,sha256=jeMjAkvChhKLEy1fpeKJ4d_bT1vnnmuGm11otQ7ncBg,202
|
|
28
|
+
mcp/server/__main__.py,sha256=KakUSquF7R44Ugwg3N5VQCJsPnsEVrbwk-UnRHerVww,1328
|
|
29
|
+
mcp/server/elicitation.py,sha256=COO3lGdDp9lYTR2lHJ6Qeov0SdGAsENPJOT3eVaKXSM,3895
|
|
30
|
+
mcp/server/models.py,sha256=w-xEPy_qGds2_bEpejN6iaWeh0UvMtKqwlXzPN_ChZ0,422
|
|
31
|
+
mcp/server/session.py,sha256=pUQ1MLmuuIl69lAf0UrpNiy80mo_ikb3yBQprcsf8Ow,12900
|
|
32
|
+
mcp/server/sse.py,sha256=QqzE9gWpG35HfQo6gbsCmZPV4ud02EtZcewNGTwKvF8,10826
|
|
33
|
+
mcp/server/stdio.py,sha256=LkFigRZC4uIDUA2JjnsKlgOuLh9IWFBNVgHcs97JsM8,3358
|
|
34
|
+
mcp/server/streamable_http.py,sha256=fnAXZRc7neVVpKh_xxYzWJtCd0lo8dgPZjYXlRzhFWw,39407
|
|
35
|
+
mcp/server/streamable_http_manager.py,sha256=QJKx7enfCiCoJxrS7slhk3UQ8NWeX90maNSlRrHWk3c,11264
|
|
36
|
+
mcp/server/transport_security.py,sha256=T8oLE1lh2WXW6cVvPiNUSmG5WmxMvdCCXkm7JdSvmIs,4938
|
|
37
|
+
mcp/server/websocket.py,sha256=sw9aSmyhOZlqK-jPQd9RS03zn9XaLR4D6HL6vi8DtBY,2352
|
|
38
|
+
mcp/server/auth/__init__.py,sha256=xmxBzGAYvejOEzxqvZxiRkootIdlpp5WrCNiPKvuKdk,51
|
|
39
|
+
mcp/server/auth/errors.py,sha256=8YjlejJPl-qMjZrbJTDzMPBOAOITn0Da0pC5QWn9QdE,224
|
|
40
|
+
mcp/server/auth/json_response.py,sha256=EMv3qAH62vRuw8XBHdFU3kYp0S8Jd6DjRGfwc7Jc9XU,377
|
|
41
|
+
mcp/server/auth/provider.py,sha256=itp10kM6TGcQGL_zMUVpQ28FK3p-q_zFK5V3CJNoHBE,9846
|
|
42
|
+
mcp/server/auth/routes.py,sha256=ALMvGZMOASowKZpabmE6P72Xa6euEIPiDcltpNnLwtQ,9085
|
|
43
|
+
mcp/server/auth/settings.py,sha256=Nj8tNCXANHMCmX6nxCa-GUrA9knJ9f8zCuMxMDFN4D4,1031
|
|
44
|
+
mcp/server/auth/handlers/__init__.py,sha256=T2ueQWVpLDbMIAiOcROyumxRwqa8Po5lA9zd_Cbt2Uc,58
|
|
45
|
+
mcp/server/auth/handlers/authorize.py,sha256=fAz-L-5Qv6KeHjpoBOAUE6sYgTuG0ydPA7y2xjb4pIM,9728
|
|
46
|
+
mcp/server/auth/handlers/metadata.py,sha256=mWPkrs1DfG-Qzq1nZU2HzwxSwk8K_vXe-ZpEDZ0k_QA,853
|
|
47
|
+
mcp/server/auth/handlers/register.py,sha256=QhjR-lYpvg58lmWGA7eb8b5N0geKztCO-vjq_fLoxq0,5721
|
|
48
|
+
mcp/server/auth/handlers/revoke.py,sha256=CnnzdtzIquq2pFYlJEYniP-1NcDSfzYqGF8jiipNiO8,3220
|
|
49
|
+
mcp/server/auth/handlers/token.py,sha256=6EuqU0ZBV-cZRenj2XckekMvJxicB5NFuo5aUOrp1Es,10090
|
|
50
|
+
mcp/server/auth/middleware/__init__.py,sha256=XhRUi_w-ie_QG7XT5EfqNG-NPZvXtJtgHSB_tPVYNIw,42
|
|
51
|
+
mcp/server/auth/middleware/auth_context.py,sha256=0hYDUr2GL0VqTVQtCCZCDop2JwGox_IuD0XBZQbtpT0,1696
|
|
52
|
+
mcp/server/auth/middleware/bearer_auth.py,sha256=-t3Ar5bNuIJtYSlF2CsvmAozEX2uySo4chp2Rzgbw4s,4423
|
|
53
|
+
mcp/server/auth/middleware/client_auth.py,sha256=CDDM-DReVtFBqftRr2OVo1MyiJc2VIlsIb2cxYPFPP8,1945
|
|
54
|
+
mcp/server/fastmcp/__init__.py,sha256=4EnleAYdPF_hgPexfq2zxGRtU_Fd3ZrjXegKckuj-K8,297
|
|
55
|
+
mcp/server/fastmcp/exceptions.py,sha256=q9djUDmpwmGEWcHI8q4UzJBtf7s7UtgL--OB7OaGzyQ,435
|
|
56
|
+
mcp/server/fastmcp/server.py,sha256=wMFow2U6S41D7-6sg19bRqF1_cHwcKzV7gBTXRKm1ao,48493
|
|
57
|
+
mcp/server/fastmcp/prompts/__init__.py,sha256=4BsMxoYolpoxg74xkkkzCFL8vvdkLVJ5cIPNs1ND1Jo,99
|
|
58
|
+
mcp/server/fastmcp/prompts/base.py,sha256=s5-zpCjfd-LLbqMoa2oJnzUoVUGW4EVhi8ufvWSjHns,7088
|
|
59
|
+
mcp/server/fastmcp/prompts/manager.py,sha256=IXIv__muOQhXgipCmKWJ4cyPjjawWkjmeahe6G29oyU,1835
|
|
60
|
+
mcp/server/fastmcp/resources/__init__.py,sha256=e4S369jBoJt07ez9_ZaJefzGfz4kr9nGwG4KPMzMHc8,464
|
|
61
|
+
mcp/server/fastmcp/resources/base.py,sha256=xEp3CQHaFJmbzVaoTwr6Xuwal2ZEbaKbFNyB2x7ttUA,1702
|
|
62
|
+
mcp/server/fastmcp/resources/resource_manager.py,sha256=gzeZ2XHFc7kdUESf2IEZwkMuxrgUrcMf5MQm9pHwu5M,3940
|
|
63
|
+
mcp/server/fastmcp/resources/templates.py,sha256=6YV7aDGM1Hf3ChARqmldc51DHSD5JOVCOsiq46U4sWc,4734
|
|
64
|
+
mcp/server/fastmcp/resources/types.py,sha256=v4nnI4vydnvFT9ZO8Euy7dsDDk1VRUVWEAEP4wbVusA,7147
|
|
65
|
+
mcp/server/fastmcp/tools/__init__.py,sha256=ZboxhyMJDl87Svjov8YwNYwNZi55P9VhmpTjBZLesnk,96
|
|
66
|
+
mcp/server/fastmcp/tools/base.py,sha256=fXqYuo4rVC8xIIxViMLuDEXHXQRwH7I6ukPbIPEC8hE,4359
|
|
67
|
+
mcp/server/fastmcp/tools/tool_manager.py,sha256=rNjJ6_ug6HZEJuYIaN7qqTGgEqiCTha6T0eeSZG9KnY,2972
|
|
68
|
+
mcp/server/fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
|
|
69
|
+
mcp/server/fastmcp/utilities/context_injection.py,sha256=BVm4Svi5RK-nlscwYZT75WuLPccRAJ_INdZxxVSM-lg,2028
|
|
70
|
+
mcp/server/fastmcp/utilities/func_metadata.py,sha256=unwzYeTu8JRVxqYZe-jiCEdtia2KpOnKHWiTEXugBjc,22121
|
|
71
|
+
mcp/server/fastmcp/utilities/logging.py,sha256=e8kBHAYHB00gntMTaWMN6uT4kwiiOdL14qDXEZU0x-k,1063
|
|
72
|
+
mcp/server/fastmcp/utilities/types.py,sha256=xXRshurGRIjVnr1lVPwcZomSSN4_wvxpNb2jS6RUCw4,3546
|
|
73
|
+
mcp/server/lowlevel/__init__.py,sha256=mS7slrVoWzHMYqDHDIJ7oRZxwPZG_I63UVQiJN311YY,93
|
|
74
|
+
mcp/server/lowlevel/func_inspection.py,sha256=uLEpY5IHgWicIfbYbaI4aDYfUgMRxuFdTu20duvH2pw,2466
|
|
75
|
+
mcp/server/lowlevel/helper_types.py,sha256=LmzGNx9FU258TKDyKjwfzH_KOnH4Mkk_k8i9EIFmN7Y,189
|
|
76
|
+
mcp/server/lowlevel/server.py,sha256=pEyUBs6HSbLAPIXFbIpak2pAXQJPy2vaDg6EH_VUQqA,29794
|
|
77
|
+
mcp/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
|
+
mcp/shared/_httpx_utils.py,sha256=oy-0n-43ewBadV0mWML1EWH7UcGFTKmajq5HJQQsJHI,2631
|
|
79
|
+
mcp/shared/auth.py,sha256=8DorcXAXlIDAFaazKlsxRLvAjEke933SY2UocQHr2g0,6416
|
|
80
|
+
mcp/shared/auth_utils.py,sha256=urxND9gJd48mHI0XgwjLx5Eq2GlMBrs4y9HebSQtyY4,3006
|
|
81
|
+
mcp/shared/context.py,sha256=ssAfEQS7jCz7ufulNfNpY01HLSGJ3_72-uCAexVAoS0,604
|
|
82
|
+
mcp/shared/exceptions.py,sha256=nmIg0QU_QZk2-mZ2YiJr5Ll9kkVmp_6pQtLGUCp8cDs,316
|
|
83
|
+
mcp/shared/memory.py,sha256=DtPFbfalB14Nm5hZS5zZLAwrIkqwZFVcBUwFcBAU1TM,3951
|
|
84
|
+
mcp/shared/message.py,sha256=rJcQ2aq0cc8V8qbpsjwUkGRsos88NVyw-GAY1XXhwRk,1140
|
|
85
|
+
mcp/shared/metadata_utils.py,sha256=9Tp9b0PkfjBhm2SlwHnod1W4Bf6vZB0p5J2E7Sv25U4,1712
|
|
86
|
+
mcp/shared/progress.py,sha256=Ys4V_DTQhYsug6KS6Bb3E4T0CDyOOaIecIXAIMFs1tU,1756
|
|
87
|
+
mcp/shared/session.py,sha256=b7IOCbyHCbzg4Nv3wgiJY03I7I-1GuxOED5Ghz3WfJk,21051
|
|
88
|
+
mcp/shared/version.py,sha256=D2vzvR6piT4XU73ykN11OaKoEXxPS0tgYTfA7rVuizI,142
|
|
89
|
+
mcp-1.22.0.dist-info/METADATA,sha256=u48HnO-msakpnhJdvMK2dMc_CYO8-EY8Gq_1kl6AwG0,85906
|
|
90
|
+
mcp-1.22.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
91
|
+
mcp-1.22.0.dist-info/entry_points.txt,sha256=gnGBbo3yGF0YJNXfZpgkAg1-CQtKxnzxrlA53c8viYA,42
|
|
92
|
+
mcp-1.22.0.dist-info/licenses/LICENSE,sha256=XhPbvB0SD8KgPOzefJFCSuLX3hG2PVje0vRDHiYe5Q0,1071
|
|
93
|
+
mcp-1.22.0.dist-info/INSTALLER,sha256=sz0Tnp99msIbbLB51q7U9nA6AvRKcsOeUKhrHH0Ulg4,12
|
|
94
|
+
mcp-1.22.0.dist-info/RECORD,,
|