Skip to content

feat(experimental): Add mcp to deadline client tools - #1

Open
kavmur wants to merge 1 commit into
mainlinefrom
mcp
Open

feat(experimental): Add mcp to deadline client tools#1
kavmur wants to merge 1 commit into
mainlinefrom
mcp

Conversation

@kavmur

@kavmur kavmur commented Jul 3, 2025

Copy link
Copy Markdown
Owner

What was the problem/requirement? (What/Why)

AWS Deadline Cloud users need a way to interact with their render farms through AI assistants and natural language interfaces. Currently, users must use CLI commands or Python APIs directly, which creates friction for AI-assisted workflows and automation. The Model Context Protocol (MCP) provides a standardized way for AI assistants to interact with external services, but AWS Deadline Cloud lacked MCP integration.

What was the solution? (How)

Add a MCP server to client tools to provide a simplified, decorator-based approach to tool registration while maintaining full MCP protocol compliance.
The server automatically registers all available Deadline Cloud API functions as MCP tools, plus additional specialized tools for job management.

What is the impact of this change?

  • AI Integration: Enables AI assistants (Claude, Cline, etc.) to manage AWS Deadline Cloud resources through natural language
  • Developer Productivity: Simplifies render farm management through conversational interfaces
  • Workflow Automation: Enables AI-driven automation of common Deadline Cloud tasks
  • Extensibility: Provides foundation for additional MCP tools (job management, fleet management, etc.)
  • No Breaking Changes: Purely additive feature that doesn't modify existing functionality

How was this change tested?

  • Manual Testing: All 17 tools tested individually with real AWS Deadline Cloud data
  • Integration Testing: Verified MCP server startup and tool discovery functionality
  • API Validation: Fixed and validated API integration issues (authentication status, JSON serialization)
  • Error Handling: Tested error scenarios and response formatting

Test Status:

  • Have you run the unit tests? - Unit tests for MCP tools not yet implemented (planned for future PR)
  • Have you run the integration tests? - Manual integration testing completed
  • Have you made changes to the download or asset_sync modules? - No changes to these modules

Was this change documented?

  • Code Documentation: All tools have comprehensive docstrings with parameter descriptions
  • README Updates: Updated main README.md with MCP server section including:
    • Installation instructions
    • Usage examples
    • Integration with AI tools (Cline, Claude Desktop)
    • Available tools overview
    • Natural language interaction examples

Does this PR introduce new dependencies?

  • This PR adds one or more new dependency Python packages. I acknowledge I have reviewed the considerations for adding dependencies in DEVELOPMENT.md.
  • This PR does not add any new dependencies.

New Dependencies Added:

  • mcp >= 0.1.0 - Model Context Protocol Python SDK (optional dependency for MCP functionality)
  • pydantic >= 2.0.0 - Data validation library used by MCP SDK

Justification: These dependencies are added as optional dependencies under the [mcp] extra, so they don't affect existing users. The MCP SDK is the standard library for MCP server implementation, and Pydantic is a widely-used validation library with minimal additional dependencies.

Is this a breaking change?

No, this is not a breaking change. This PR is purely additive:

  • No existing public APIs are modified
  • No existing CLI commands are changed
  • New functionality is accessed through new deadline-mcp command
  • All existing functionality remains unchanged
  • MCP dependencies are optional and only required when using MCP features

Does this change impact security?

No significant security impact:

  • Authentication: Uses existing AWS Deadline Cloud authentication mechanisms
  • Permissions: Leverages existing IAM roles and permissions - no new permission model
  • Data Handling: Only processes and returns data already accessible through existing APIs
  • Network: Uses stdio transport (local communication) - no new network endpoints
  • Credentials: Does not store or cache credentials - uses existing credential providers

The MCP server runs locally and communicates via stdio, maintaining the same security posture as the existing CLI tools.


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@kavmur kavmur changed the title Add mcp to deadline client tools feat(experimental): Add mcp to deadline client tools Jul 3, 2025
@prestomation

Copy link
Copy Markdown

Cool! My high level thoughts:

  1. We should have a dev guide doc for the MCP server. we should have a strategy that we only use public APIs from the lib, and if we want to add a tool we add it to the API first
  2. remove all the tools that don't point at public APIs
  3. remove the placeholder tools. maybe the generic API caller too, people can add an AWS sdk tool if they really want
  4. fix pagination in the lists
  5. Let's discuss/fixs the handling of profiles and defaults. it should probably work just like the CLI(which means adding a profile override to all tools maybe?)
  6. ship it!
  7. we should add some documentation resources and improve the doc strings.

Comment thread docs/mcp_user_guide.md Outdated
Comment on lines +80 to +81
### Background Job Submission
The job submission process is implemented using a background thread pattern to handle long-running operations:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This doesn't really make sense to me. Is this the LLM thinking that Deadline is 'the background thread'

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

This is mainly to avoid MCP timeout error for jobs with large attachments. We could get rid of this code and keep the submit tool synchronous if we increase the timeout values in MCP config settings, but that is a manual step.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hm interesting. this is a client configuration?

@kavmur kavmur Jul 17, 2025

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

yes, this is a client configuration. If we want to keep the tool blocking we will need a larger timeout in client config json or patched in client request: https://github.com/modelcontextprotocol/typescript-sdk/blob/main/src/shared/protocol.ts#L593

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

I switched this back to blocking to make the tool much simpler. We can add progress reporting once that is supported by more clients: https://modelcontextprotocol.io/specification/2025-03-26/basic/utilities/progress

Comment thread docs/mcp_user_guide.md Outdated

1. Install the AWS Deadline Cloud client package:
bash
pip install deadline

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

pipe install "deadline[mcp]"?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

fixed in next rev.

Comment thread docs/mcp_user_guide.md Outdated
### Starting the MCP Server

```sh
$ deadline-mcp

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

my preference is we make this like deadline mcp-server and not add more things to the path. we already have the CLI infrastructure to easily add commands.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

fixed in next rev

Comment thread src/deadline/mcp/tools/attachment.py Outdated
if not destination:
destination = root

logger = ClickLogger(is_json=True)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

seems we should configure the logger at the entry point. at somepoint this MCP server could run in a service environment and using this ClickLogger won't make sense.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Removed this tool as per feedback. We are only exposing public api functions

Comment thread src/deadline/mcp/tools/attachment.py Outdated

if not result:
return json.dumps({
"status": "NO_FILES",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

is this status thing part of MCP or just a convention?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Not part of MCP, just a convention for returning LLM friendly messages.

Comment thread src/deadline/mcp/tools/job.py Outdated
Comment on lines +215 to +216
from deadline.job_attachments.download import OutputDownloader
from deadline.job_attachments.models import FileConflictResolution, JobAttachmentS3Settings

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

we have a lot of imports inside of functions. why is that? we should avoid this if at all possible. the reasons I've seen people resort to it is usually a giant code smell(circular dependencies), but in this case I'm guessing your LLM was hyper focused on this function and didn't want to touch the beginning of the file or something? I've definitely seen that. A good ruff rule should fix this.

Comment thread src/deadline/mcp/tools/job.py Outdated

deadline = api.get_boto3_client("deadline")
queue = deadline.get_queue(farmId=farm_id, queueId=queue_id)
queue_role_session = api.get_queue_user_boto3_session(

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

hm the MCP server should probably hang on to a shared credential provider so every request doesn't perform a new refresh

@kavmur kavmur Aug 1, 2025

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

I tried creating a cached queue user session with shared credential provider, but this lead to more duplicate code as I cannot reuse the CLI's helpers directly. And I think shared user sessions only make sense for mcp server (since it is long running/multi tenant) vs a CLI. Also we do use @lru_cache which provides some level of caching.

Comment thread src/deadline/mcp/tools/placeholder.py Outdated
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

"""
AWS Deadline Cloud MCP placeholder tools.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Personally I don't think we should have this file but let's discuss! if we really want we could add a single resource that describes all this. Adding a ton of tools that the LLM gets to call and waste an entire context window just to find out it doesn't do anything to everyones context is not frugal

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Makes sense to remove it to save context space. I was thinking this would help LLM search for the right tool, but we don't need to create a bunch of tools for that, one generic response/prompt for any api that is not available should work.

@leon-li-inspire leon-li-inspire Jul 23, 2025

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Could we try to use mcp.prompt to combine all these tools into one ? e.g.

@app.prompt()
def farm_management() -> str:
    """Call the following farm management APIs
         -CreateFarm
         -UpdateFarm
         -...
    """
    return "This operation is not supported through the Deadline client API. Please use the AWS CLI, AWS Console, or the aws-documentation-mcp-server for creating farms."

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Thanks, @app.prompt is a good idea to combine everything, but I think will still occupy a lot of context space. Especially for info that agents can easily figure out from other docs/context. So will remove all placeholder/generic tools and focus only on ones that are exposed in deadline cli

Comment thread src/deadline/mcp/tools/queue.py Outdated
Comment on lines +22 to +23
result = api.list_queues(farmId=farm_id)
queues = result.get('queues', [])

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

same comment about pagination

Comment thread src/deadline/mcp/tools/queue.py Outdated
queue_id: The ID of the queue to retrieve
"""
try:
result = api.list_queues(farmId=farm_id)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

same as above, use getqueue

Comment thread README.md Outdated
```


Shared storage is possible with customer-managed fleets (CMF) but not service-managed fleets (SMF). See [shared storage][shared-storage] for more information.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This change doesn't look related to the MCP.

Comment thread docs/mcp_user_guide.md Outdated

## Architecture Overview

The AWS Deadline Cloud MCP Server uses FastMCP within the MCP Python SDK to provide a simplified, decorator-based approach to tool registration while maintaining full MCP protocol compliance.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This doc doesn't define the MCP acronym, or what the purpose of an MCP is. That would be great to describe in this section, along with an overview of what you can accomplish when you use this MCP.

Comment thread docs/mcp_user_guide.md Outdated
- `submit_job(farm_id: str, queue_id: str, bundle_path: str, job_name: str = None, priority: int = 50)`: Submit new job from bundle (non-blocking with background processing)
- `check_job_submission(submission_id: str)`: Check status of background job submission
- `cancel_job(farm_id: str, queue_id: str, job_id: str, mark_as: str = "CANCELED")`: Cancel running job
- `download_job_output(farm_id: str, queue_id: str, job_id: str, destination_dir: str = None)`: Download job output files

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think this interface needs some more thought. What does destination_dir do when the job has inputs and outputs spread across three different drive letters?

Comment thread docs/mcp_user_guide.md Outdated
- `create_queue(farm_id: str, display_name: str, description: str = None)`: Create queue
- `update_queue(farm_id: str, queue_id: str, display_name: str = None, description: str = None)`: Update queue
- `delete_queue(farm_id: str, queue_id: str)`: Delete queue
- `get_job_logs(farm_id: str, queue_id: str, job_id: str)`: Get job logs

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should this one go in job management?

Comment thread docs/mcp_user_guide.md Outdated
### Manual Testing
```bash
# Start the MCP server
deadline-mcp

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should be a space instead of a - here.

@crowecawcaw

Copy link
Copy Markdown

As an idea, what about putting your prompt into a PR and getting feedback there? It'd be easier to review and it'd be easier for you as the author to make changes. Then once the prompt/design feels right, you can launch an agent at it.

@crowecawcaw

Copy link
Copy Markdown

Another thought: I think the public interface for the MCP server is the agent, not the MCP tools themselves. For backwards compatibility, we should be thoughtful about how an agent's behavior may change but I think we can iterate on the tools pretty freely. Doubly so if we throw an "experimental" flag on it.

Comment thread docs/mcp_user_guide.md Outdated
Comment thread docs/mcp_user_guide.md Outdated
Comment on lines +27 to +29
## Tool Organization

Tools are organized by functional area:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

It'd be helpful to have guidance on what becomes a tool. As a first guess, maybe expose each CLI command as a tool?

Comment thread src/deadline/mcp/tools/farm.py Outdated
Comment thread src/deadline/mcp/tools/farm.py Outdated
@kavmur
kavmur force-pushed the mcp branch 8 times, most recently from 53dd1e6 to afec5ee Compare August 1, 2025 21:30
Comment thread docs/mcp_user_guide.md Outdated
**From `deadline.client.api._get_apis`:**
- `deadline_get_farm()`: Get detailed farm information

**From `deadline.client.api._session`:**

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Most of these don't look like they'd made good MCP tools. Some return things that aren't serializable as text like boto3 clients.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Added an allowlist (as suggested below) to the auto register function, so we expose only selected apis that would make useful tools.

Comment thread docs/mcp_user_guide.md Outdated
Comment on lines +86 to +88
## Usage Examples

### Common Operations

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Not sure this info is useful since MCP tools are not used directly by users and agents don't see this user guide.

Comment thread docs/mcp_user_guide.md Outdated
Comment on lines +120 to +127
### Testing the Server

**Start the MCP server:**
```bash
deadline mcp-server
```

**Test with MCP client tools or IDE integrations that support MCP**

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The MCP server should not be stared directly, right? To test it, it need to be added to an agent's config file.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

True, general usage would be adding this command to an agent's config or mcp client config. But for testing I found it to be useful if we are using a custom mcp client or mcp-inspector. I can reword it.

Comment thread docs/mcp_user_guide.md Outdated
Comment on lines +131 to +134
## Prerequisites
- Python 3.8 through 3.13
- AWS Deadline Cloud client
- AWS credentials configured

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nit: remove this. Python requirements are documented elsewhere, and the Deadline Client and AWS creds are set up below.

Comment thread docs/mcp_user_guide.md Outdated
Comment on lines +159 to +164
4. **Set up default configuration (recommended):**
```bash
deadline config set defaults.farm_id <your-farm-id>
deadline config set defaults.queue_id <your-queue-id>
deadline config set defaults.storage_profile_id <your-storage-profile-id>
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Should the agent be able to do this?

@kavmur kavmur Aug 4, 2025

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Good point, agents should ask for required fields based on tools signature if they are not provided in request and dont use config. I can remove them.

Comment thread src/deadline/mcp/tools/utils.py Outdated
inspect.Parameter('nextToken', inspect.Parameter.KEYWORD_ONLY, default=None, annotation=str),
inspect.Parameter('principalId', inspect.Parameter.KEYWORD_ONLY, default=None, annotation=str),
inspect.Parameter('maxResults', inspect.Parameter.KEYWORD_ONLY, default=None, annotation=str),
inspect.Parameter('studioId', inspect.Parameter.KEYWORD_ONLY, default=None, annotation=str),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

There shouldn't be any studio references in the codebase right?

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Thanks! removed.

Comment thread src/deadline/mcp/tools/utils.py Outdated
return {k: v for k, v in kwargs.items() if v is not None and v != "" and v != "null"}


def _create_telemetry_wrapper(original_func, func_name: str, tool_serializer, tool_error_handler):

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Why is this function so much smaller than the regular wrapper below? Seems like they should be similar? This function should just be ignoring the telemetry stuff right?

Comment thread src/deadline/mcp/tools/utils.py Outdated
return wrapper


def auto_register_api_tools(

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Since not all API functions are useful for agents (e.g. boto3 client constructors), maybe use an allowlist. Like:

tools = [
  api.list_farms,
  api.get_farm,
  ...
]

A list lets us choose more intentionally what tools we expose while still using this automation you made so that the tools and APIs stay consistent.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Yes, allowlist makes more sense. Fixed.

Comment thread test/unit/deadline_mcp/test_server.py Outdated
from deadline.mcp.tools.job import submit_job


class TestMCPServer:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

It'd be great to have a test which starts the real MCP server, then 1) uses an MCP client to connect to call ListTools and 2) actually invokes a tool and gets back a valid response.

Comment thread DEVELOPMENT.md Outdated
```bash
# Replace with your AWS Account ID
export SERVICE_ACCOUNT_ID=000000000000
export SERVICE_ACCOUNT_ID=170849269209

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nit: we'll need to revert these before merging

Comment thread docs/mcp_user_guide.md Outdated

### Advanced Workflows
```
"Help me troubleshoot why my render job failed"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Have we tested this workflow? Can this succeeded root cause the render job failure reason?

from ...job_attachments.models import FileConflictResolution


# TODO: Make submit_job tool async once progress reporting feature is supported in clients

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: You mentioned 1 GB upload takes less than 50 seconds, do we need this comment here too ?

Comment thread test/unit/deadline_mcp/test_server.py Outdated
# Call the function with a mock bundle path and required parameters
result = submit_job("/mock/path", name="Test Job", priority=50, farm_id="farm-123", queue_id="queue-456")

# The function returns a dictionary with error information due to missing config

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

nit: Based on the test name, is this test case expected to succeeded to submit the job ? Otherwise, we may need to change the test name

Comment thread test/unit/deadline_mcp/test_server.py Outdated


class TestMCPServer:
"""Test the MCP server functionality."""

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Do we also need to have unit tests to test the tool being auto registered , otherwise we are not sure whether they have been auto registered successfully or not

@kavmur
kavmur force-pushed the mcp branch 2 times, most recently from 985cae4 to 4eb5144 Compare August 8, 2025 16:23
*,
purpose: JobBundlePurpose,
) -> dict[str, Any]: ...
) -> Optional[dict[str, Any]]: ...

Check notice

Code scanning / CodeQL

Statement has no effect Note

This statement has no effect.

Copilot Autofix

AI 12 months ago

To fix the problem, replace the ... statement at the end of the __call__ method in the OnCreateJobBundleCallback protocol with a pass statement. This makes it clear that the method is intentionally left unimplemented, as is standard for protocol or abstract method definitions in Python. The change should be made in the file src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py, specifically on line 66. No additional imports or definitions are required.

Suggested changeset 1
src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py b/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py
--- a/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py
+++ b/src/deadline/client/ui/dialogs/submit_job_to_deadline_dialog.py
@@ -63,7 +63,8 @@
         host_requirements: Optional[Dict[str, Any]] = None,
         *,
         purpose: JobBundlePurpose,
-    ) -> Optional[dict[str, Any]]: ...
+    ) -> Optional[dict[str, Any]]:
+        pass
 
 
 class SubmitJobToDeadlineDialog(QDialog):
EOF
@@ -63,7 +63,8 @@
host_requirements: Optional[Dict[str, Any]] = None,
*,
purpose: JobBundlePurpose,
) -> Optional[dict[str, Any]]: ...
) -> Optional[dict[str, Any]]:
pass


class SubmitJobToDeadlineDialog(QDialog):
Copilot is powered by AI and may make mistakes. Always verify output.
Unable to commit as this autofix suggestion is now outdated
@kavmur
kavmur force-pushed the mcp branch 5 times, most recently from 9b34bab to 560972d Compare August 12, 2025 23:55
@kavmur
kavmur force-pushed the mcp branch 6 times, most recently from cd09b3e to f013217 Compare August 18, 2025 21:59
@kavmur
kavmur force-pushed the mcp branch 4 times, most recently from 02d47c9 to fb8e817 Compare September 26, 2025 21:32
Signed-off-by: kavmur <kavmur@users.noreply.github.com>
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.

6 participants