Skip to content

mcp draft support - #32

Merged
Agent-Hellboy merged 5 commits into
masterfrom
codex/mcp-draft-support
Jul 3, 2026
Merged

Agent-Hellboy merged 5 commits into
masterfrom
codex/mcp-draft-support

Conversation

@Agent-Hellboy

@Agent-Hellboy Agent-Hellboy commented Jul 3, 2026 •

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features
    • Added opt-in draft stateless protocol support, including server/discover, stateless request handling, and stateless streaming subscriptions.
    • Improved capability negotiation via protocol-revision-aware extension reporting (including tasks as an extension capability).
    • Added tasks/update for active tasks and task input-response persistence.
    • Introduced token introspection authentication and optional OAuth resource_metadata_url.
  • Bug Fixes
    • Rejected Bearer tokens in query-string access with a clear 401 error.
    • Added stricter stateless HTTP metadata/method/version validation with better protocol error codes.
  • Documentation
    • Updated README, runtime-surface, and security docs for draft defaults, capability behavior, and new auth options.

@coderabbitai

coderabbitai Bot commented Jul 3, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@Agent-Hellboy, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 17 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f267c204-10e3-42f3-bb6e-78b6aa6523ef

📥 Commits

Reviewing files that changed from the base of the PR and between a5beb58 and 58483a7.

📒 Files selected for processing (6)
  • docs/runtime-surface.md
  • pymcp/protocol/payload.py
  • pymcp/runtime/handlers/discovery.py
  • pymcp/security/configured.py
  • pymcp/settings.py
  • tests/unit/test_draft_protocol.py
📝 Walkthrough

Walkthrough

This PR adds draft MCP protocol support with stateless request handling, extension-aware capability negotiation, discovery and task update RPCs, HTTP/SSE routing changes, and updated OAuth token introspection and metadata handling.

Changes

Draft stateless protocol support

Layer / File(s) Summary
Protocol revisions and metadata
pymcp/protocol/revisions.py, pymcp/protocol/metadata.py, pymcp/protocol/errors.py, pymcp/protocol/extensions.py, pymcp/protocol/__init__.py, pymcp/protocol/payload.py
Adds protocol revision types, request metadata parsing/validation, extension helpers, new protocol error codes, public exports, and draft payload shaping.
Capability shaping and server settings
pymcp/capabilities/registry.py, pymcp/settings.py, pymcp/runtime/server.py, pymcp/runtime/types.py
Makes capabilities and settings revision-aware, adds extension negotiation, and threads protocol mode/version through server and dispatch context state.
Dispatch pipeline and RPC handlers
pymcp/runtime/protocol_context.py, pymcp/runtime/dispatch.py, pymcp/runtime/processors.py, pymcp/runtime/handlers/discovery.py, pymcp/runtime/handlers/tasks.py, tests/unit/test_tasks_runtime.py
Adds stateless dispatch context builders, dispatch processors, revision gates, server/discover, and tasks/update.
Stateless transport and HTTP validation
pymcp/transport/http_validation.py, pymcp/transport/subscriptions.py, pymcp/transport/streamable_http.py, pymcp/transport/stdio.py
Adds stateless HTTP metadata validation, SSE streaming, and routing for stateless requests across HTTP and stdio transports.
Draft protocol docs and tests
README.md, docs/runtime-surface.md, tests/unit/test_capability_direction.py, tests/unit/test_client_capabilities.py, tests/unit/test_draft_protocol.py
Updates draft protocol documentation and adds tests for capability extensions, draft mode defaults, transport validation, and runtime behavior.

OAuth and token introspection

Layer / File(s) Summary
OAuth metadata and introspection auth
pymcp/security/oauth.py, pymcp/security/configured.py, pymcp/security/__init__.py, pymcp/middleware.py
Validates protected-resource metadata URLs, adds token introspection authentication, exports it, and rejects query-string bearer tokens.
Security docs and tests
docs/security.md, tests/test_middleware.py
Documents introspection and metadata URL behavior and adds tests for challenge metadata, token rejection, and introspection outcomes.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant streamable_http
  participant Dispatcher
  participant validate_stateless_http_metadata
  participant StatlessJsonRpcMessageProcessor
  participant handle_server_discover

  Client->>streamable_http: POST /mcp with _meta and headers
  streamable_http->>validate_stateless_http_metadata: validate stateless metadata
  validate_stateless_http_metadata-->>streamable_http: ok or HttpValidationError
  streamable_http->>Dispatcher: dispatch_stateless(data)
  Dispatcher->>StatlessJsonRpcMessageProcessor: process(data)
  StatlessJsonRpcMessageProcessor->>handle_server_discover: server/discover
  handle_server_discover-->>StatlessJsonRpcMessageProcessor: supportedVersions, capabilities, serverInfo
  StatlessJsonRpcMessageProcessor-->>Client: JSON-RPC response
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and clearly points to the main theme of adding MCP draft support, though it is broader than the specific implementation details.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/mcp-draft-support

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

Documentation Build

The docs site built successfully for this pull request.

Target GitHub Pages URL: https://Agent-Hellboy.github.io/py-mcp/

The published site updates after merge to main or master.

@codecov

codecov Bot commented Jul 3, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 82.65971% with 133 lines in your changes missing coverage. Please review.
✅ Project coverage is 77.47%. Comparing base (c4130c9) to head (58483a7).

Files with missing lines Patch % Lines
pymcp/transport/http_validation.py 73.17% 22 Missing ⚠️
pymcp/transport/subscriptions.py 48.48% 17 Missing ⚠️
pymcp/runtime/handlers/tasks.py 59.45% 15 Missing ⚠️
pymcp/security/configured.py 84.70% 13 Missing ⚠️
pymcp/runtime/dispatch.py 80.76% 10 Missing ⚠️
pymcp/protocol/revisions.py 87.87% 8 Missing ⚠️
pymcp/security/oauth.py 72.41% 8 Missing ⚠️
pymcp/protocol/metadata.py 84.78% 7 Missing ⚠️
pymcp/runtime/handlers/discovery.py 84.21% 6 Missing ⚠️
pymcp/runtime/types.py 82.85% 6 Missing ⚠️
... and 9 more
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #32      +/-   ##
==========================================
+ Coverage   76.85%   77.47%   +0.62%     
==========================================
  Files          78       86       +8     
  Lines        5383     6079     +696     
==========================================
+ Hits         4137     4710     +573     
- Misses       1246     1369     +123     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fedb7debc0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread pymcp/transport/streamable_http.py
Comment on lines +110 to +113
if mode == "draft":
return (LATEST_DRAFT_PROTOCOL_VERSION,)
if mode == "dual":
return (LATEST_DRAFT_PROTOCOL_VERSION, *STABLE_PROTOCOL_VERSIONS)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep draft revisions out of initialize negotiation

When protocol_mode="draft" or "dual", this puts the stateless 2026-07-28 revision into the same ServerSettings.protocol_versions tuple that handle_initialize negotiates against. As a result, an initialize request with params.protocolVersion="2026-07-28" succeeds and creates a stateful session even though REVISION_2026_07_28 is marked stateless=True/supports_initialization=False, so draft-only servers can advertise and operate a protocol flow the revision explicitly forbids. Filter non-initializable revisions from the initialize negotiation or maintain separate enabled-vs-initializable version lists.

Useful? React with 👍 / 👎.

Comment thread pymcp/runtime/handlers/discovery.py Outdated
)
result: JSONObject = {
"supportedVersions": list(ctx.server_settings.protocol_versions),
"capabilities": negotiate_capabilities(client_capabilities, server_capabilities),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply capability filtering during discovery

Draft server/discover replaces the initialize response for stateless clients, but this path returns the raw negotiated server capabilities without the authorizer.filter_capabilities(...) step used by handle_initialize. In deployments that configure capability hiding/filtering and allow discovery, draft clients will see capability fragments that stable clients have filtered out for the same principal; run the discovered capabilities through the authorizer before returning them.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (5)
tests/unit/test_draft_protocol.py (2)

46-70: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Hardcoded extension identifier.

Line 69 hardcodes "io.modelcontextprotocol/tasks" rather than importing MCP_TASKS (already imported constants pattern is used elsewhere in this file for MCP_APPS_UI etc.). Minor consistency nit, same as flagged in test_client_capabilities.py.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unit/test_draft_protocol.py` around lines 46 - 70, The test currently
hardcodes the tasks extension string in
test_draft_server_discover_is_stateless_and_cacheable, which is inconsistent
with the imported constants pattern used elsewhere in this file. Update the
assertion to use the existing MCP_TASKS constant instead of the literal value,
matching the style already used for MCP_APPS_UI and similar symbols.

13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Import the draft version constant instead of duplicating the literal. Use LATEST_DRAFT_PROTOCOL_VERSION from pymcp.protocol.revisions here to avoid test/source drift.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unit/test_draft_protocol.py` at line 13, The DRAFT_VERSION constant in
the test file is hardcoded as a literal string instead of importing the single
source of truth. Import LATEST_DRAFT_PROTOCOL_VERSION from
pymcp.protocol.revisions at the top of the test file and replace the hardcoded
DRAFT_VERSION assignment with this imported constant to ensure the test stays in
sync with the actual protocol version definition.
tests/unit/test_client_capabilities.py (1)

125-127: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prefer importing the MCP_TASKS constant over the hardcoded literal.

The test hardcodes "io.modelcontextprotocol/tasks" instead of importing the MCP_TASKS constant used internally by ClientCapabilities.supports, which checks has_extension(self.capabilities, MCP_TASKS) for the "tasks" feature. Using the literal string risks silent test drift if the constant value ever changes.

♻️ Suggested fix
-from pymcp.protocol.extensions import (
+from pymcp.protocol.extensions import (
+    MCP_TASKS,
     MCP_APPS_UI,
     MCP_ENTERPRISE_MANAGED_AUTHORIZATION,
     MCP_OAUTH_CLIENT_CREDENTIALS,
 )
...
     def test_supports_tasks_when_declared_as_extension(self):
-        cc = ClientCapabilities({"extensions": {"io.modelcontextprotocol/tasks": {}}})
+        cc = ClientCapabilities({"extensions": {MCP_TASKS: {}}})
         assert cc.supports("tasks")
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unit/test_client_capabilities.py` around lines 125 - 127, The test for
ClientCapabilities.supports currently hardcodes the tasks extension string,
which can drift from the internal MCP_TASKS constant used by supports. Update
the test in test_supports_tasks_when_declared_as_extension to import and use
MCP_TASKS instead of the literal so it stays aligned with
ClientCapabilities.supports and has_extension.
pymcp/protocol/revisions.py (1)

156-171: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Sort __all__ per Ruff RUF022.

Static analysis flags this list as unsorted.

🧹 Suggested fix
 __all__ = [
     "DEFAULT_PROTOCOL_MODE",
+    "Extension",
     "LATEST_DRAFT_PROTOCOL_VERSION",
     "LATEST_STABLE_PROTOCOL_VERSION",
-    "Extension",
-    "ProtocolMode",
-    "ProtocolRevision",
     "STABLE_PROTOCOL_VERSIONS",
     "enabled_protocol_revisions",
     "extension_for_feature",
     "get_protocol_revision",
     "is_draft_protocol",
     "is_stateless_protocol",
     "known_protocol_versions",
+    "ProtocolMode",
+    "ProtocolRevision",
     "protocol_versions_for_mode",
 ]
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pymcp/protocol/revisions.py` around lines 156 - 171, The __all__ export list
in revisions.py is not sorted, triggering Ruff RUF022. Reorder the names in the
__all__ assignment into alphabetical order while keeping the same exported
symbols, and make sure the updated list remains the single source of public
exports for this module.

Source: Linters/SAST tools

pymcp/protocol/metadata.py (1)

36-79: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Minor duplication between lenient and strict metadata extraction.

extract_request_metadata and require_request_metadata both re-read the same _meta keys independently. A shared internal helper that parses raw fields, with the strict variant adding validation on top, would reduce the risk of the two falling out of sync if a _meta key is renamed or a new required field is added.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pymcp/protocol/metadata.py` around lines 36 - 79, Refactor the duplicated
`_meta` parsing in `extract_request_metadata` and `require_request_metadata` by
introducing a shared internal helper in `metadata.py` that reads
`extract_params`, `_meta`, `PROTOCOL_VERSION_META_KEY`, `CLIENT_INFO_META_KEY`,
and `CLIENT_CAPABILITIES_META_KEY` once and returns the parsed values; keep
`extract_request_metadata` lenient by mapping invalid fields to defaults/None,
and have `require_request_metadata` build on the same helper while enforcing the
existing validation rules and raising `RequestMetadataError` for missing or
malformed fields.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pymcp/runtime/handlers/tasks.py`:
- Around line 174-212: The tasks/update handler in runtime/handlers/tasks.py
validates inputResponses but never uses it before returning success, so update
the task flow to apply that value to the pending task. In the update handler,
after task lookup and terminal-state checks, forward inputResponses into the
task manager or task record using the existing task_id, ctx.session_id, and
ctx.session.principal context so the waiting task receives the data and can
resume. Keep the current error handling paths intact, but make sure the success
response is only returned after the input has been persisted or dispatched.

In `@pymcp/transport/subscriptions.py`:
- Around line 44-49: The subscriptions/listen SSE loop currently only sends
heartbeat pings and waits on a new empty Queue every iteration, so it never
streams actual notifications. Update the listen flow in subscriptions.py to
consume from a real event source or shared queue used by the notification
producer, and remove the per-iteration Queue creation/task churn. If the
behavior is intentionally incomplete, clearly mark listen as a placeholder;
otherwise ensure the generator yields requested notifications instead of only
keepalive pings.

---

Nitpick comments:
In `@pymcp/protocol/metadata.py`:
- Around line 36-79: Refactor the duplicated `_meta` parsing in
`extract_request_metadata` and `require_request_metadata` by introducing a
shared internal helper in `metadata.py` that reads `extract_params`, `_meta`,
`PROTOCOL_VERSION_META_KEY`, `CLIENT_INFO_META_KEY`, and
`CLIENT_CAPABILITIES_META_KEY` once and returns the parsed values; keep
`extract_request_metadata` lenient by mapping invalid fields to defaults/None,
and have `require_request_metadata` build on the same helper while enforcing the
existing validation rules and raising `RequestMetadataError` for missing or
malformed fields.

In `@pymcp/protocol/revisions.py`:
- Around line 156-171: The __all__ export list in revisions.py is not sorted,
triggering Ruff RUF022. Reorder the names in the __all__ assignment into
alphabetical order while keeping the same exported symbols, and make sure the
updated list remains the single source of public exports for this module.

In `@tests/unit/test_client_capabilities.py`:
- Around line 125-127: The test for ClientCapabilities.supports currently
hardcodes the tasks extension string, which can drift from the internal
MCP_TASKS constant used by supports. Update the test in
test_supports_tasks_when_declared_as_extension to import and use MCP_TASKS
instead of the literal so it stays aligned with ClientCapabilities.supports and
has_extension.

In `@tests/unit/test_draft_protocol.py`:
- Around line 46-70: The test currently hardcodes the tasks extension string in
test_draft_server_discover_is_stateless_and_cacheable, which is inconsistent
with the imported constants pattern used elsewhere in this file. Update the
assertion to use the existing MCP_TASKS constant instead of the literal value,
matching the style already used for MCP_APPS_UI and similar symbols.
- Line 13: The DRAFT_VERSION constant in the test file is hardcoded as a literal
string instead of importing the single source of truth. Import
LATEST_DRAFT_PROTOCOL_VERSION from pymcp.protocol.revisions at the top of the
test file and replace the hardcoded DRAFT_VERSION assignment with this imported
constant to ensure the test stays in sync with the actual protocol version
definition.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 76eed161-a900-4a9c-ba8d-d012a8126794

📥 Commits

Reviewing files that changed from the base of the PR and between c4130c9 and fedb7de.

📒 Files selected for processing (25)
  • README.md
  • docs/runtime-surface.md
  • pymcp/capabilities/registry.py
  • pymcp/protocol/__init__.py
  • pymcp/protocol/errors.py
  • pymcp/protocol/extensions.py
  • pymcp/protocol/metadata.py
  • pymcp/protocol/payload.py
  • pymcp/protocol/revisions.py
  • pymcp/runtime/dispatch.py
  • pymcp/runtime/handlers/discovery.py
  • pymcp/runtime/handlers/tasks.py
  • pymcp/runtime/processors.py
  • pymcp/runtime/protocol_context.py
  • pymcp/runtime/server.py
  • pymcp/runtime/types.py
  • pymcp/settings.py
  • pymcp/transport/http_validation.py
  • pymcp/transport/stdio.py
  • pymcp/transport/streamable_http.py
  • pymcp/transport/subscriptions.py
  • tests/unit/test_capability_direction.py
  • tests/unit/test_client_capabilities.py
  • tests/unit/test_draft_protocol.py
  • tests/unit/test_tasks_runtime.py

Comment thread pymcp/runtime/handlers/tasks.py
Comment thread pymcp/transport/subscriptions.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pymcp/security/configured.py`:
- Around line 186-196: The authenticate() flow in ConfiguredAuthentication
currently calls requests.post() synchronously inside an async path, which blocks
the event loop during token introspection. Update the introspection request in
configured.py to run off the loop by either wrapping the existing requests.post
call with asyncio.to_thread or switching the introspection logic to an async
HTTP client such as httpx, and keep the existing AuthenticationError handling in
place around the same authenticate()/introspection code path.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 855d8682-6159-442e-8743-55d5bf6908b7

📥 Commits

Reviewing files that changed from the base of the PR and between fedb7de and a5beb58.

📒 Files selected for processing (17)
  • docs/security.md
  • pymcp/middleware.py
  • pymcp/protocol/metadata.py
  • pymcp/runtime/dispatch.py
  • pymcp/runtime/handlers/tasks.py
  • pymcp/runtime/processors.py
  • pymcp/runtime/protocol_context.py
  • pymcp/security/__init__.py
  • pymcp/security/configured.py
  • pymcp/security/oauth.py
  • pymcp/tasks/engine.py
  • pymcp/transport/streamable_http.py
  • pymcp/transport/subscriptions.py
  • tests/test_middleware.py
  • tests/unit/test_client_capabilities.py
  • tests/unit/test_draft_protocol.py
  • tests/unit/test_tasks_runtime.py
✅ Files skipped from review due to trivial changes (2)
  • docs/security.md
  • pymcp/transport/streamable_http.py
🚧 Files skipped from review as they are similar to previous changes (8)
  • tests/unit/test_tasks_runtime.py
  • tests/unit/test_client_capabilities.py
  • pymcp/transport/subscriptions.py
  • pymcp/runtime/processors.py
  • tests/unit/test_draft_protocol.py
  • pymcp/runtime/protocol_context.py
  • pymcp/protocol/metadata.py
  • pymcp/runtime/dispatch.py

Comment thread pymcp/security/configured.py
@Agent-Hellboy
Agent-Hellboy merged commit d26dd29 into master Jul 3, 2026
12 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant