Modal MCP Server
모달 MCP 서버
Cursor 내에서 Modal 볼륨과 상호 작용하고 Modal 애플리케이션을 배포하기 위한 MCP 서버 구현입니다.
설치
이 저장소를 복제하세요:
지엑스피1
uv사용하여 종속성을 설치합니다.
uv syncRelated MCP server: Outsource MCP
구성
Cursor에서 이 MCP 서버를 사용하려면 ~/.cursor/mcp.json 에 다음 구성을 추가하세요.
{
"mcpServers": {
"modal-mcp-server": {
"command": "uv",
"args": [
"--project", "/path/to/modal-mcp-server",
"run", "/path/to/modal-mcp-server/src/modal_mcp/server.py"
]
}
}
}/path/to/modal-mcp-server 복제된 저장소의 절대 경로로 바꾸세요.
요구 사항
Python 3.11 이상
uv패키지 관리자유효한 자격 증명으로 구성된 모달 CLI
Modal 배포 지원:
배포되는 프로젝트는 종속성 관리를 위해
uv사용해야 합니다.Modal은 프로젝트의 가상 환경에 설치되어야 합니다.
지원되는 도구
모달 볼륨 작업
모달 볼륨 목록 (
list_modal_volumes)사용자 환경의 모든 모달 볼륨을 나열합니다.
JSON 형식의 볼륨 정보를 반환합니다.
매개변수: 없음
볼륨 내용 목록 (
list_modal_volume_contents)모달 볼륨의 파일 및 디렉토리를 나열합니다.
매개변수:
volume_name: 모달 볼륨의 이름path: 볼륨 내 경로(기본값: "/")
파일 복사 (
copy_modal_volume_files)모달 볼륨 내의 파일을 복사합니다.
매개변수:
volume_name: 모달 볼륨의 이름paths: 마지막 경로가 목적지인 경로 목록
예:
["source.txt", "dest.txt"]또는["file1.txt", "file2.txt", "dest_dir/"]
파일 제거 (
remove_modal_volume_file)모달 볼륨에서 파일이나 디렉토리를 삭제합니다.
매개변수:
volume_name: 모달 볼륨의 이름remote_path: 삭제할 파일/디렉토리 경로recursive: 재귀적 삭제에 대한 부울 플래그(기본값: false)
파일 업로드 (
put_modal_volume_file)모달 볼륨에 파일이나 디렉토리를 업로드합니다.
매개변수:
volume_name: 모달 볼륨의 이름local_path: 업로드할 로컬 파일/디렉토리 경로remote_path: 업로드할 볼륨의 경로(기본값: "/")force: 기존 파일을 덮어쓸지 여부를 지정하는 부울 플래그(기본값: false)
파일 다운로드 (
get_modal_volume_file)모달 볼륨에서 파일을 다운로드합니다.
매개변수:
volume_name: 모달 볼륨의 이름remote_path: 다운로드할 볼륨의 파일/디렉토리 경로local_destination: 다운로드한 파일을 저장할 로컬 경로(기본값: 현재 디렉토리)force: 기존 파일을 덮어쓸지 여부를 지정하는 부울 플래그(기본값: false)
참고: 파일 내용을 stdout에 쓰려면
local_destination으로 "-"를 사용하세요.
모달 배포
모달 앱 배포 (
deploy_modal_app)모달 애플리케이션을 배포합니다
매개변수:
absolute_path_to_app: Modal 애플리케이션 파일에 대한 절대 경로
참고: Modal 앱이 포함된 프로젝트는 다음과 같아야 합니다.
종속성 관리를 위해
uv사용하세요가상 환경에
modalCLI를 설치하세요
응답 형식
모든 도구는 작업 유형에 따라 약간의 차이가 있지만 표준화된 형식으로 응답을 반환합니다.
# JSON operations (list volumes, list contents):
{
"success": True,
"data": {...} # JSON data from Modal CLI
}
# File operations (put, get, copy, remove):
{
"success": True,
"message": "Operation successful message",
"command": "executed command string",
"stdout": "command output", # if any
"stderr": "error output" # if any
}
# Error case (all operations):
{
"success": False,
"error": "Error message describing what went wrong",
"command": "executed command string", # for file operations
"stdout": "command output", # if available
"stderr": "error output" # if available
}기여하다
기여를 환영합니다! 풀 리퀘스트를 제출해 주세요.
특허
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여되었습니다. 자세한 내용은 라이선스 파일을 참조하세요.
Available Tools
7 toolscopy_modal_volume_filesA
Copy files within a Modal volume. Can copy a source file to a destination file
or multiple source files to a destination directory.
Args:
volume_name: Name of the Modal volume to perform copy operation in.
paths: List of paths for the copy operation. The last path is the destination,
all others are sources. For example: ["source1.txt", "source2.txt", "dest_dir/"]
Returns:
A dictionary containing the result of the copy operation.
Raises:
Exception: If the copy operation fails for any reason.
| Name | Required | Description | Default |
|---|---|---|---|
| volume_name | Yes | ||
| paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the operation type (copy) and mentions failure cases ('Raises: Exception'), but doesn't cover permissions needed, rate limits, or what happens with existing destination files. It adds some context but lacks comprehensive behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Raises), front-loaded purpose statement, and no wasted sentences. Each part earns its place by providing essential information efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters with 0% schema coverage and no output schema, the description does well by fully explaining parameters and return format. However, as a mutation tool with no annotations, it could better cover behavioral aspects like idempotency or error specifics for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains both parameters: 'volume_name' as the Modal volume name, and 'paths' with detailed semantics including source/destination roles and an example. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Copy files') and resource ('within a Modal volume'), specifying it can copy single files or multiple files to directories. It distinguishes from siblings like 'get_modal_volume_file' (read) and 'put_modal_volume_file' (upload).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for copying files within a Modal volume, but doesn't explicitly state when to use this vs. alternatives like 'put_modal_volume_file' for uploading external files or 'remove_modal_volume_file' for deletion. It provides clear context but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_modal_appC
Deploy a Modal application using the provided parameters.
Args:
absolute_path_to_app: The absolute path to the Modal application to deploy.
Returns:
A dictionary containing deployment results.
Raises:
Exception: If deployment fails for any reason.
| Name | Required | Description | Default |
|---|---|---|---|
| absolute_path_to_app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that deployment can fail and raises exceptions, but doesn't describe what 'deploy' actually does (e.g., creates resources, starts services), what permissions are required, whether it's idempotent, or any rate limits. For a deployment tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with clear sections (Args, Returns, Raises). It's front-loaded with the core purpose statement. However, the 'Raises' section could be more specific than just 'Exception'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deployment tool with no annotations, no output schema, and minimal parameter documentation, the description is incomplete. It doesn't explain what deployment entails, what the return dictionary contains, or provide sufficient context for safe and effective use. The sibling tools suggest this operates in a Modal environment, but that context isn't leveraged.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds that the parameter is 'The absolute path to the Modal application to deploy' which provides basic semantics, but doesn't explain what constitutes a 'Modal application' (e.g., a directory, a specific file format), path format requirements, or validation rules. This provides minimal compensation for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool 'Deploy a Modal application' which provides a clear verb+resource combination. However, it doesn't differentiate from sibling tools (which all deal with Modal volumes/files, not deployments), making the purpose clear but lacking sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites, when deployment is appropriate, or what alternatives might exist for similar operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modal_volume_fileA
Download files from a Modal volume.
Args:
volume_name: Name of the Modal volume to download from.
remote_path: Path to the file or directory in the volume to download.
local_destination: Local path to save the downloaded file(s). Defaults to current directory.
Use "-" to write file contents to stdout.
force: If True, overwrite existing files. Defaults to False.
Returns:
A dictionary containing the result of the download operation.
Raises:
Exception: If the download operation fails for any reason.
| Name | Required | Description | Default |
|---|---|---|---|
| volume_name | Yes | ||
| remote_path | Yes | ||
| local_destination | No | . | |
| force | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a download operation (implies read-only but not explicitly stated), can overwrite files with 'force', supports stdout output, and may raise exceptions on failure. However, it doesn't mention rate limits, authentication needs, or detailed error handling beyond generic exceptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. Each sentence earns its place: the opening statement sets context, the Args section details parameters efficiently, and the Returns/Raises sections provide necessary completion info without redundancy. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description does a good job covering the tool's complexity. It explains parameters thoroughly, hints at behavior (overwrite, stdout), and mentions error handling. However, it could be more complete by explicitly stating read-only nature or contrasting with upload/list siblings more directly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all 4 parameters: explains what 'volume_name' and 'remote_path' are, clarifies 'local_destination' defaults and special case ('-'), and defines 'force' behavior. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Download files from a Modal volume') and distinguishes it from siblings like 'list_modal_volume_contents' (which lists contents) and 'put_modal_volume_file' (which uploads). It specifies the resource (Modal volume) and verb (download) precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning downloading from a volume, but does not explicitly state when to use this tool versus alternatives like 'copy_modal_volume_files' or 'list_modal_volume_contents'. It provides clear parameter defaults and behavior hints (e.g., using '-' for stdout), but lacks explicit sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modal_volume_contentsB
List files and directories in a Modal volume.
Args:
volume_name: Name of the Modal volume to list contents from.
path: Path within the volume to list contents from. Defaults to root ("/").
Returns:
A dictionary containing the parsed JSON output of the volume contents.
| Name | Required | Description | Default |
|---|---|---|---|
| volume_name | Yes | ||
| path | No | / |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('A dictionary containing the parsed JSON output'), which adds some value, but fails to address critical aspects like read-only nature, error conditions, pagination, or rate limits. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with a clear purpose statement followed by separate 'Args' and 'Returns' sections. Each sentence adds value without redundancy, making it easy to parse and understand quickly. The formatting enhances readability without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and parameters but lacks usage guidelines, behavioral details, and output specifics. While it meets a minimum viable standard, it doesn't fully equip an agent for optimal tool selection and invocation in context with siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for both parameters: 'volume_name' is explained as 'Name of the Modal volume to list contents from,' and 'path' as 'Path within the volume to list contents from. Defaults to root ("/").' This compensates for the 0% schema description coverage by clarifying the purpose and default value, though it doesn't detail constraints or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List files and directories in a Modal volume.' It specifies the verb ('List') and resource ('files and directories in a Modal volume'), making the action and target explicit. However, it does not differentiate this tool from its sibling 'list_modal_volumes', which might cause confusion without additional context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lacks context such as prerequisites, when to choose this over 'list_modal_volumes' (which lists volumes themselves), or how it relates to other siblings like 'get_modal_volume_file'. This absence of usage instructions leaves the agent without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modal_volumesB
List all Modal volumes using the Modal CLI with JSON output.
Returns:
A dictionary containing the parsed JSON output of the Modal volumes list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions JSON output format but lacks critical details: whether this requires authentication, has rate limits, returns paginated results, or what happens on errors. For a list operation with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two focused sentences. The first sentence states the core action and implementation, while the second describes the return format. There's no wasted text, though it could be slightly more structured with clearer separation of concerns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description provides adequate but minimal context. It covers what the tool does and the return format, but lacks behavioral details that would be helpful for an agent. For a read-only list operation, this is minimally viable but leaves room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the empty parameter set. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose and output. This meets the baseline expectation for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('Modal volumes') with specific implementation details ('using the Modal CLI with JSON output'). It distinguishes from siblings like 'list_modal_volume_contents' by focusing on volumes themselves rather than contents. However, it doesn't explicitly contrast with other volume-related tools like 'copy_modal_volume_files'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites, appropriate contexts, or compare it to sibling tools like 'list_modal_volume_contents' for different use cases. The agent receives no usage direction beyond the basic function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_modal_volume_fileA
Upload a file or directory to a Modal volume.
Args:
volume_name: Name of the Modal volume to upload to.
local_path: Path to the local file or directory to upload.
remote_path: Path in the volume to upload to. Defaults to root ("/").
If ending with "/", it's treated as a directory and the file keeps its name.
force: If True, overwrite existing files. Defaults to False.
Returns:
A dictionary containing the result of the upload operation.
Raises:
Exception: If the upload operation fails for any reason.
| Name | Required | Description | Default |
|---|---|---|---|
| volume_name | Yes | ||
| local_path | Yes | ||
| remote_path | No | / | |
| force | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the upload operation, overwrite behavior via the 'force' parameter, and error handling ('Raises: Exception'), but doesn't cover aspects like authentication requirements, rate limits, or what specific data the return dictionary contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Raises) and front-loaded purpose statement. It's appropriately sized for a 4-parameter tool, though the 'Raises' section could be more specific than 'Exception' to be fully optimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description provides adequate coverage for core functionality but has gaps. It explains parameters well and mentions return type (dictionary) and error handling, but doesn't detail the dictionary structure or other behavioral aspects like side effects or prerequisites, leaving some context incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant semantic value beyond the input schema, which has 0% description coverage. It explains all four parameters clearly: volume_name identifies the target, local_path specifies the source, remote_path defines the destination with default and directory-handling rules, and force controls overwrite behavior. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Upload a file or directory') and target resource ('to a Modal volume'), distinguishing it from sibling tools like get_modal_volume_file (download) or remove_modal_volume_file (delete). It uses precise terminology that matches the tool name without being tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for uploading files to Modal volumes but doesn't explicitly state when to use this tool versus alternatives like copy_modal_volume_files or when not to use it (e.g., for downloading). It provides some context through parameter explanations but lacks explicit guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_modal_volume_fileB
Delete a file or directory from a Modal volume.
Args:
volume_name: Name of the Modal volume to delete from.
remote_path: Path to the file or directory to delete.
recursive: If True, delete directories recursively. Required for deleting directories.
Returns:
A dictionary containing the result of the delete operation.
Raises:
Exception: If the delete operation fails for any reason.
| Name | Required | Description | Default |
|---|---|---|---|
| volume_name | Yes | ||
| remote_path | Yes | ||
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool performs a delete operation and mentions potential failure ('Raises: Exception: If the delete operation fails for any reason'), which is useful. However, it lacks details on permissions required, whether deletions are permanent or reversible, rate limits, or what the result dictionary contains. For a destructive tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and well-structured. It starts with a clear purpose statement, followed by organized sections for 'Args', 'Returns', and 'Raises'. Each sentence adds value without redundancy, making it easy to scan and understand. The formatting enhances readability without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive operation with 3 parameters), no annotations, and no output schema, the description is moderately complete. It covers the basic purpose and parameters but lacks details on behavioral aspects like safety warnings, output structure, or error handling specifics. For a delete tool, more context on irreversible actions or confirmation steps would improve completeness, but it meets minimum viable standards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains each parameter: 'volume_name' as 'Name of the Modal volume to delete from', 'remote_path' as 'Path to the file or directory to delete', and 'recursive' with specific usage context ('If True, delete directories recursively. Required for deleting directories'). This compensates well for the schema's lack of descriptions, though it doesn't cover all potential edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Delete a file or directory from a Modal volume.' It specifies the verb ('Delete') and resource ('file or directory from a Modal volume'), distinguishing it from siblings like 'copy_modal_volume_files' or 'get_modal_volume_file'. However, it doesn't explicitly differentiate from other destructive operations like 'deploy_modal_app' beyond the resource scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the 'recursive' parameter explanation ('Required for deleting directories'), suggesting when to set this flag. It doesn't provide explicit guidance on when to use this tool versus alternatives like 'list_modal_volume_contents' for checking before deletion or mention any prerequisites. The guidance is functional but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- First observed
copy_modal_volume_files - First observed
deploy_modal_app - First observed
get_modal_volume_file - First observed
list_modal_volume_contents - First observed
list_modal_volumes - First observed
put_modal_volume_file - First observed
remove_modal_volume_file
TDQS
Scored across 7 tools
Every tool has a clearly distinct purpose with no overlap: copy, deploy, get (download), list contents, list volumes, put (upload), and remove (delete) are all unique operations. The descriptions clearly differentiate between volume operations and app deployment, making tool selection straightforward for an agent.
All tools follow a consistent verb_noun pattern with 'modal' as a prefix (e.g., copy_modal_volume_files, deploy_modal_app, get_modal_volume_file). The naming is uniform throughout, using snake_case and clear action-object pairs, making the set predictable and easy to understand.
With 7 tools, this server is well-scoped for managing Modal volumes and applications. Each tool serves a specific, necessary function (e.g., CRUD operations for volumes, listing, and deployment), and there are no redundant or missing tools for the apparent domain, making the count ideal.
The tool surface provides complete coverage for Modal volume management (create via put, read via get and list, update via copy, delete via remove) and app deployment. There are no obvious gaps; agents can perform all core workflows without dead ends, ensuring effective operation within the domain.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Cloud-hosted MCP server for durable AI memory
Related MCP Servers
- FlicenseDqualityFmaintenanceAn MCP server that allows users to deploy Python scripts to Modal directly from Claude, providing a link to the deployed application that can be shared with others.14-
- AlicenseAqualityDmaintenanceAn MCP server that enables AI applications to access 20+ model providers (including OpenAI, Anthropic, Google) through a unified interface for text and image generation.230MIT
- AlicenseAqualityAmaintenanceAn MCP server for managing Modal — apps, containers, volumes, and secrets — and for deploying & running Modal apps directly from Claude Code and other MCP clients.12217 PyPI2MIT
- AlicenseBqualityDmaintenanceAn MCP server that enables LLM coding agents to deploy web applications to AWS serverless infrastructure, supporting backend, frontend, and fullstack deployments.55 npm1MIT