luma-mcp 1.2.1 β†’ 1.2.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.
Files changed (38) hide show
  1. package/.github/workflows/release.yml +0 -17
  2. package/CHANGELOG.md +21 -0
  3. package/README.md +5 -1
  4. package/build/image-processor.d.ts.map +1 -1
  5. package/build/image-processor.js +33 -17
  6. package/build/image-processor.js.map +1 -1
  7. package/build/prompts.d.ts +1 -1
  8. package/build/prompts.d.ts.map +1 -1
  9. package/build/prompts.js +14 -28
  10. package/build/prompts.js.map +1 -1
  11. package/minimax_coding_plan_mcp-0.0.2/.env.test +4 -0
  12. package/minimax_coding_plan_mcp-0.0.2/LICENSE +21 -0
  13. package/minimax_coding_plan_mcp-0.0.2/PKG-INFO +200 -0
  14. package/minimax_coding_plan_mcp-0.0.2/README.md +143 -0
  15. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/PKG-INFO +200 -0
  16. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/SOURCES.txt +17 -0
  17. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/dependency_links.txt +1 -0
  18. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/entry_points.txt +2 -0
  19. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/requires.txt +20 -0
  20. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/top_level.txt +1 -0
  21. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__init__.py +3 -0
  22. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__main__.py +99 -0
  23. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/__init__.cpython-313.pyc +0 -0
  24. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/client.cpython-313.pyc +0 -0
  25. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/const.cpython-313.pyc +0 -0
  26. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/exceptions.cpython-313.pyc +0 -0
  27. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/utils.cpython-313.pyc +0 -0
  28. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/client.py +104 -0
  29. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/const.py +4 -0
  30. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/exceptions.py +24 -0
  31. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/server.py +169 -0
  32. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/utils.py +101 -0
  33. package/minimax_coding_plan_mcp-0.0.2/pyproject.toml +59 -0
  34. package/minimax_coding_plan_mcp-0.0.2/setup.cfg +4 -0
  35. package/minimax_coding_plan_mcp-0.0.2/setup.py +6 -0
  36. package/minimax_coding_plan_mcp-0.0.2/test_at_prefix.py +134 -0
  37. package/minimax_coding_plan_mcp-0.0.2/test_real_image.py +153 -0
  38. package/package.json +1 -1
@@ -0,0 +1,143 @@
1
+ ![export](https://github.com/MiniMax-AI/MiniMax-01/raw/main/figures/MiniMaxLogo-Light.png)
2
+
3
+ <div align="center" style="line-height: 1;">
4
+ <a href="https://www.minimax.io" target="_blank" style="margin: 2px; color: var(--fgColor-default);">
5
+ <img alt="Homepage" src="https://img.shields.io/badge/_Homepage-MiniMax-FF4040?style=flat-square&labelColor=2C3E50&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDkwLjE2IDQxMS43Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjMzLjQ1LDQwLjgxYTE3LjU1LDE3LjU1LDAsMSwwLTM1LjEsMFYzMzEuNTZhNDAuODIsNDAuODIsMCwwLDEtODEuNjMsMFYxNDVhMTcuNTUsMTcuNTUsMCwxLDAtMzUuMDksMHY3OS4wNmE0MC44Miw0MC44MiwwLDAsMS04MS42MywwVjE5NS40MmExMS42MywxMS42MywwLDAsMSwyMy4yNiwwdjI4LjY2YTE3LjU1LDE3LjU1LDAsMCwwLDM1LjEsMFYxNDVBNDAuODIsNDAuODIsMCwwLDEsMTQwLDE0NVYzMzEuNTZhMTcuNTUsMTcuNTUsMCwwLDAsMzUuMSwwVjIxNy41aDBWNDAuODFhNDAuODEsNDAuODEsMCwxLDEsODEuNjIsMFYyODEuNTZhMTEuNjMsMTEuNjMsMCwxLDEtMjMuMjYsMFptMjE1LjksNjMuNEE0MC44Niw0MC44NiwwLDAsMCw0MDguNTMsMTQ1VjMwMC44NWExNy41NSwxNy41NSwwLDAsMS0zNS4wOSwwdi0yNjBhNDAuODIsNDAuODIsMCwwLDAtODEuNjMsMFYzNzAuODlhMTcuNTUsMTcuNTUsMCwwLDEtMzUuMSwwVjMzMGExMS42MywxMS42MywwLDEsMC0yMy4yNiwwdjQwLjg2YTQwLjgxLDQwLjgxLDAsMCwwLDgxLjYyLDBWNDAuODFhMTcuNTUsMTcuNTUsMCwwLDEsMzUuMSwwdjI2MGE0MC44Miw0MC44MiwwLDAsMCw4MS42MywwVjE0NWExNy41NSwxNy41NSwwLDEsMSwzNS4xLDBWMjgxLjU2YTExLjYzLDExLjYzLDAsMCwwLDIzLjI2LDBWMTQ1QTQwLjg1LDQwLjg1LDAsMCwwLDQ0OS4zNSwxMDQuMjFaIi8+PC9zdmc+&logoWidth=20" style="display: inline-block; vertical-align: middle;"/>
6
+ </a>
7
+ <a href="https://arxiv.org/abs/2501.08313" target="_blank" style="margin: 2px;">
8
+ <img alt="Paper" src="https://img.shields.io/badge/πŸ“–_Paper-MiniMax--01-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
9
+ </a>
10
+ <a href="https://chat.minimax.io/" target="_blank" style="margin: 2px;">
11
+ <img alt="Chat" src="https://img.shields.io/badge/_MiniMax_Chat-FF4040?style=flat-square&labelColor=2C3E50&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDkwLjE2IDQxMS43Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjMzLjQ1LDQwLjgxYTE3LjU1LDE3LjU1LDAsMSwwLTM1LjEsMFYzMzEuNTZhNDAuODIsNDAuODIsMCwwLDEtODEuNjMsMFYxNDVhMTcuNTUsMTcuNTUsMCwxLDAtMzUuMDksMHY3OS4wNmE0MC44Miw0MC44MiwwLDAsMS04MS42MywwVjE5NS40MmExMS42MywxMS42MywwLDAsMSwyMy4yNiwwdjI4LjY2YTE3LjU1LDE3LjU1LDAsMCwwLDM1LjEsMFYxNDVBNDAuODIsNDAuODIsMCwwLDEsMTQwLDE0NVYzMzEuNTZhMTcuNTUsMTcuNTUsMCwwLDAsMzUuMSwwVjIxNy41aDBWNDAuODFhNDAuODEsNDAuODEsMCwxLDEsODEuNjIsMFYyODEuNTZhMTEuNjMsMTEuNjMsMCwxLDEtMjMuMjYsMFptMjE1LjksNjMuNEE0MC44Niw0MC44NiwwLDAsMCw0MDguNTMsMTQ1VjMwMC44NWExNy41NSwxNy41NSwwLDAsMS0zNS4wOSwwdi0yNjBhNDAuODIsNDAuODIsMCwwLDAtODEuNjMsMFYzNzAuODlhMTcuNTUsMTcuNTUsMCwwLDEtMzUuMSwwVjMzMGExMS42MywxMS42MywwLDEsMC0yMy4yNiwwdjQwLjg2YTQwLjgxLDQwLjgxLDAsMCwwLDgxLjYyLDBWNDAuODFhMTcuNTUsMTcuNTUsMCwwLDEsMzUuMSwwdjI2MGE0MC44Miw0MC44MiwwLDAsMCw4MS42MywwVjE0NWExNy41NSwxNy41NSwwLDEsMSwzNS4xLDBWMjgxLjU2YTExLjYzLDExLjYzLDAsMCwwLDIzLjI2LDBWMTQ1QTQwLjg1LDQwLjg1LDAsMCwwLDQ0OS4zNSwxMDQuMjFaIi8+PC9zdmc+&logoWidth=20" style="display: inline-block; vertical-align: middle;"/>
12
+ </a>
13
+ <a href="https://www.minimax.io/platform" style="margin: 2px;">
14
+ <img alt="API" src="https://img.shields.io/badge/⚑_API-Platform-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
15
+ </a>
16
+ </div>
17
+ <div align="center" style="line-height: 1;">
18
+ <a href="https://huggingface.co/MiniMaxAI" target="_blank" style="margin: 2px;">
19
+ <img alt="Hugging Face" src="https://img.shields.io/badge/πŸ€—_Hugging_Face-MiniMax-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
20
+ </a>
21
+ <a href="https://github.com/MiniMax-AI/MiniMax-AI.github.io/blob/main/images/wechat-qrcode.jpeg" target="_blank" style="margin: 2px;">
22
+ <img alt="WeChat" src="https://img.shields.io/badge/_WeChat-MiniMax-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
23
+ </a>
24
+ <a href="https://www.modelscope.cn/organization/MiniMax" target="_blank" style="margin: 2px;">
25
+ <img alt="ModelScope" src="https://img.shields.io/badge/_ModelScope-MiniMax-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
26
+ </a>
27
+ </div>
28
+ <div align="center" style="line-height: 1;">
29
+ <a href="https://github.com/MiniMax-AI/MiniMax-MCP/blob/main/LICENSE" style="margin: 2px;">
30
+ <img alt="Code License" src="https://img.shields.io/badge/_Code_License-MIT-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
31
+ </a>
32
+ </div>
33
+
34
+ <p align="center">
35
+ Specialized MiniMax Model Context Protocol (MCP) server designed for <a href="https://platform.minimax.io/docs/coding-plan/intro">coding-plan</a> users, featuring AI-powered search and vision analysis APIs optimized for code development workflows. Unlike the standard <a href="https://github.com/MiniMax-AI/MiniMax-MCP">MiniMax-MCP</a>, this version provides coding-specific tools (for examples: <code>web_search</code> and <code>understand_image</code>) that integrate seamlessly with MCP clients like <a href="https://www.anthropic.com/claude">Claude Desktop</a>, <a href="https://www.cursor.so">Cursor</a>, <a href="https://codeium.com/windsurf">Windsurf</a>, <a href="https://github.com/openai/openai-agents-python">OpenAI Agents</a> and others to enhance your coding experience.
36
+ </p>
37
+
38
+ ## Documentation
39
+ - [δΈ­ζ–‡ζ–‡ζ‘£](README-CN.md)
40
+
41
+
42
+ ## Quickstart with MCP Client
43
+ 1. Get your API key from [MiniMax](https://www.minimax.io/platform/user-center/basic-information/interface-key).
44
+ 2. Install `uv` (Python package manager), install with `curl -LsSf https://astral.sh/uv/install.sh | sh` or see the `uv` [repo](https://github.com/astral-sh/uv) for additional install methods.
45
+ 3. **Important**: The API host and key vary by region and must match; otherwise, you'll encounter an `Invalid API key` error.
46
+
47
+ |Region| Global | Mainland |
48
+ |:--|:-----|:-----|
49
+ |MINIMAX_API_KEY| go get from [MiniMax Global](https://www.minimax.io/platform/user-center/basic-information/interface-key) | go get from [MiniMax](https://platform.minimaxi.com/user-center/basic-information/interface-key) |
50
+ |MINIMAX_API_HOST| https://api.minimax.io | https://api.minimaxi.com |
51
+
52
+
53
+ ### Claude Desktop
54
+ Go to `Claude > Settings > Developer > Edit Config > claude_desktop_config.json` to include the following:
55
+
56
+ ```
57
+ {
58
+ "mcpServers": {
59
+ "MiniMax": {
60
+ "command": "uvx",
61
+ "args": [
62
+ "minimax-coding-plan-mcp",
63
+ "-y"
64
+ ],
65
+ "env": {
66
+ "MINIMAX_API_KEY": "insert-your-api-key-here",
67
+ "MINIMAX_API_HOST": "api host, https://api.minimax.io | https://api.minimaxi.com"
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ ```
74
+ ⚠️ Warning: The API key needs to match the host. If an error "API Error: invalid api key" occurs, please check your api host:
75
+ - Global Host:`https://api.minimax.io`
76
+ - Mainland Host:`https://api.minimaxi.com`
77
+
78
+ If you're using Windows, you will have to enable "Developer Mode" in Claude Desktop to use the MCP server. Click "Help" in the hamburger menu in the top left and select "Enable Developer Mode".
79
+
80
+
81
+ ### Cursor
82
+ Go to `Cursor -> Preferences -> Cursor Settings -> MCP -> Add new global MCP Server` to add above config.
83
+
84
+ That's it. Your MCP client can now interact with MiniMax through these tools:
85
+
86
+ ## Transport
87
+ We support two transport types: stdio and sse.
88
+ | stdio | SSE |
89
+ |:-----|:-----|
90
+ | Run locally | Can be deployed locally or in the cloud |
91
+ | Communication through `stdout` | Communication through `network` |
92
+ | Input: Supports processing `local files` or valid `URL` resources | Input: When deployed in the cloud, it is recommended to use `URL` for input |
93
+
94
+ ## Available Tools
95
+ | tool | description |
96
+ |-|-|
97
+ |`web_search`|Performs web searches and returns organic search results along with related search queries|
98
+ |`understand_image`|Analyzes images with AI based on text prompts, extracts information and answers questions about images|
99
+
100
+ ## Release Notes
101
+
102
+ ### November 20, 2025
103
+
104
+ #### πŸ†• What's New
105
+ - **Web Search**: New `web_search` tool - perform web searches and get organic results with related search queries
106
+ - **Vision Language Model**: New `understand_image` tool - analyze images using AI based on text prompts
107
+
108
+ #### πŸ“ˆ Features
109
+ - `web_search` - Search the web and get structured results including titles, links, snippets, and related searches
110
+ - `understand_image` - Analyze images from URLs or local files, supporting JPEG, PNG, and WebP formats
111
+
112
+ ## FAQ
113
+ ### 1. invalid api key
114
+ Please ensure your API key and API host are regionally aligned
115
+ |Region| Global | Mainland |
116
+ |:--|:-----|:-----|
117
+ |MINIMAX_API_KEY| go get from [MiniMax Global](https://www.minimax.io/platform/user-center/basic-information/interface-key) | go get from [MiniMax](https://platform.minimaxi.com/user-center/basic-information/interface-key) |
118
+ |MINIMAX_API_HOST| https://api.minimax.io | https://api.minimaxi.com |
119
+
120
+ ### 2. spawn uvx ENOENT
121
+ Please confirm its absolute path by running this command in your terminal:
122
+ ```sh
123
+ which uvx
124
+ ```
125
+ Once you obtain the absolute path (e.g., /usr/local/bin/uvx), update your configuration to use that path (e.g., "command": "/usr/local/bin/uvx").
126
+
127
+
128
+
129
+ ## Example usage
130
+
131
+ ⚠️ Warning: Using these tools may incur costs.
132
+
133
+ ### 1. Web Search
134
+ Use the `web_search` tool to search for information on the web:
135
+
136
+ <img src="https://cdn.hailuoai.video/moss/prod/2025-11-20-15/user/multi_chat_file/99ff15e3-e5d6-48e2-8216-38c6abf03c71.image/png" style="display:
137
+ inline-block; vertical-align: middle; "/>
138
+
139
+ ### 2. Image Analysis
140
+ Use the `understand_image` tool to analyze images with AI:
141
+
142
+ <img src="https://cdn.hailuoai.video/moss/prod/2025-11-20-15/user/multi_chat_file/1f8174a2-68d5-4576-b886-86933eab5280.image/png" style="display:
143
+ inline-block; vertical-align: middle; "/>
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: minimax-coding-plan-mcp
3
+ Version: 0.0.2
4
+ Summary: Specialized MiniMax Model Context Protocol (MCP) server designed for coding-plan users
5
+ Author-email: Roy Wu <zhengyu@minimax.chat>
6
+ License: MIT License
7
+
8
+ Copyright 2025 MiniMax AI.
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Keywords: minimax,mcp,web_search,understand-image
29
+ Classifier: Development Status :: 4 - Beta
30
+ Classifier: Intended Audience :: Developers
31
+ Classifier: License :: OSI Approved :: MIT License
32
+ Classifier: Programming Language :: Python :: 3
33
+ Classifier: Programming Language :: Python :: 3.10
34
+ Requires-Python: >=3.10
35
+ Description-Content-Type: text/markdown
36
+ License-File: LICENSE
37
+ Requires-Dist: mcp[cli]>=1.6.0
38
+ Requires-Dist: fastapi>=0.109.2
39
+ Requires-Dist: uvicorn>=0.27.1
40
+ Requires-Dist: python-dotenv>=1.0.1
41
+ Requires-Dist: pydantic>=2.6.1
42
+ Requires-Dist: httpx>=0.28.1
43
+ Requires-Dist: fuzzywuzzy>=0.18.0
44
+ Requires-Dist: python-Levenshtein>=0.25.0
45
+ Requires-Dist: sounddevice>=0.5.1
46
+ Requires-Dist: soundfile>=0.13.1
47
+ Requires-Dist: requests>=2.31.0
48
+ Provides-Extra: dev
49
+ Requires-Dist: pre-commit>=3.6.2; extra == "dev"
50
+ Requires-Dist: ruff>=0.3.0; extra == "dev"
51
+ Requires-Dist: fastmcp>=0.4.1; extra == "dev"
52
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
53
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
54
+ Requires-Dist: twine>=6.1.0; extra == "dev"
55
+ Requires-Dist: build>=1.0.3; extra == "dev"
56
+ Dynamic: license-file
57
+
58
+ ![export](https://github.com/MiniMax-AI/MiniMax-01/raw/main/figures/MiniMaxLogo-Light.png)
59
+
60
+ <div align="center" style="line-height: 1;">
61
+ <a href="https://www.minimax.io" target="_blank" style="margin: 2px; color: var(--fgColor-default);">
62
+ <img alt="Homepage" src="https://img.shields.io/badge/_Homepage-MiniMax-FF4040?style=flat-square&labelColor=2C3E50&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDkwLjE2IDQxMS43Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjMzLjQ1LDQwLjgxYTE3LjU1LDE3LjU1LDAsMSwwLTM1LjEsMFYzMzEuNTZhNDAuODIsNDAuODIsMCwwLDEtODEuNjMsMFYxNDVhMTcuNTUsMTcuNTUsMCwxLDAtMzUuMDksMHY3OS4wNmE0MC44Miw0MC44MiwwLDAsMS04MS42MywwVjE5NS40MmExMS42MywxMS42MywwLDAsMSwyMy4yNiwwdjI4LjY2YTE3LjU1LDE3LjU1LDAsMCwwLDM1LjEsMFYxNDVBNDAuODIsNDAuODIsMCwwLDEsMTQwLDE0NVYzMzEuNTZhMTcuNTUsMTcuNTUsMCwwLDAsMzUuMSwwVjIxNy41aDBWNDAuODFhNDAuODEsNDAuODEsMCwxLDEsODEuNjIsMFYyODEuNTZhMTEuNjMsMTEuNjMsMCwxLDEtMjMuMjYsMFptMjE1LjksNjMuNEE0MC44Niw0MC44NiwwLDAsMCw0MDguNTMsMTQ1VjMwMC44NWExNy41NSwxNy41NSwwLDAsMS0zNS4wOSwwdi0yNjBhNDAuODIsNDAuODIsMCwwLDAtODEuNjMsMFYzNzAuODlhMTcuNTUsMTcuNTUsMCwwLDEtMzUuMSwwVjMzMGExMS42MywxMS42MywwLDEsMC0yMy4yNiwwdjQwLjg2YTQwLjgxLDQwLjgxLDAsMCwwLDgxLjYyLDBWNDAuODFhMTcuNTUsMTcuNTUsMCwwLDEsMzUuMSwwdjI2MGE0MC44Miw0MC44MiwwLDAsMCw4MS42MywwVjE0NWExNy41NSwxNy41NSwwLDEsMSwzNS4xLDBWMjgxLjU2YTExLjYzLDExLjYzLDAsMCwwLDIzLjI2LDBWMTQ1QTQwLjg1LDQwLjg1LDAsMCwwLDQ0OS4zNSwxMDQuMjFaIi8+PC9zdmc+&logoWidth=20" style="display: inline-block; vertical-align: middle;"/>
63
+ </a>
64
+ <a href="https://arxiv.org/abs/2501.08313" target="_blank" style="margin: 2px;">
65
+ <img alt="Paper" src="https://img.shields.io/badge/πŸ“–_Paper-MiniMax--01-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
66
+ </a>
67
+ <a href="https://chat.minimax.io/" target="_blank" style="margin: 2px;">
68
+ <img alt="Chat" src="https://img.shields.io/badge/_MiniMax_Chat-FF4040?style=flat-square&labelColor=2C3E50&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDkwLjE2IDQxMS43Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjMzLjQ1LDQwLjgxYTE3LjU1LDE3LjU1LDAsMSwwLTM1LjEsMFYzMzEuNTZhNDAuODIsNDAuODIsMCwwLDEtODEuNjMsMFYxNDVhMTcuNTUsMTcuNTUsMCwxLDAtMzUuMDksMHY3OS4wNmE0MC44Miw0MC44MiwwLDAsMS04MS42MywwVjE5NS40MmExMS42MywxMS42MywwLDAsMSwyMy4yNiwwdjI4LjY2YTE3LjU1LDE3LjU1LDAsMCwwLDM1LjEsMFYxNDVBNDAuODIsNDAuODIsMCwwLDEsMTQwLDE0NVYzMzEuNTZhMTcuNTUsMTcuNTUsMCwwLDAsMzUuMSwwVjIxNy41aDBWNDAuODFhNDAuODEsNDAuODEsMCwxLDEsODEuNjIsMFYyODEuNTZhMTEuNjMsMTEuNjMsMCwxLDEtMjMuMjYsMFptMjE1LjksNjMuNEE0MC44Niw0MC44NiwwLDAsMCw0MDguNTMsMTQ1VjMwMC44NWExNy41NSwxNy41NSwwLDAsMS0zNS4wOSwwdi0yNjBhNDAuODIsNDAuODIsMCwwLDAtODEuNjMsMFYzNzAuODlhMTcuNTUsMTcuNTUsMCwwLDEtMzUuMSwwVjMzMGExMS42MywxMS42MywwLDEsMC0yMy4yNiwwdjQwLjg2YTQwLjgxLDQwLjgxLDAsMCwwLDgxLjYyLDBWNDAuODFhMTcuNTUsMTcuNTUsMCwwLDEsMzUuMSwwdjI2MGE0MC44Miw0MC44MiwwLDAsMCw4MS42MywwVjE0NWExNy41NSwxNy41NSwwLDEsMSwzNS4xLDBWMjgxLjU2YTExLjYzLDExLjYzLDAsMCwwLDIzLjI2LDBWMTQ1QTQwLjg1LDQwLjg1LDAsMCwwLDQ0OS4zNSwxMDQuMjFaIi8+PC9zdmc+&logoWidth=20" style="display: inline-block; vertical-align: middle;"/>
69
+ </a>
70
+ <a href="https://www.minimax.io/platform" style="margin: 2px;">
71
+ <img alt="API" src="https://img.shields.io/badge/⚑_API-Platform-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
72
+ </a>
73
+ </div>
74
+ <div align="center" style="line-height: 1;">
75
+ <a href="https://huggingface.co/MiniMaxAI" target="_blank" style="margin: 2px;">
76
+ <img alt="Hugging Face" src="https://img.shields.io/badge/πŸ€—_Hugging_Face-MiniMax-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
77
+ </a>
78
+ <a href="https://github.com/MiniMax-AI/MiniMax-AI.github.io/blob/main/images/wechat-qrcode.jpeg" target="_blank" style="margin: 2px;">
79
+ <img alt="WeChat" src="https://img.shields.io/badge/_WeChat-MiniMax-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
80
+ </a>
81
+ <a href="https://www.modelscope.cn/organization/MiniMax" target="_blank" style="margin: 2px;">
82
+ <img alt="ModelScope" src="https://img.shields.io/badge/_ModelScope-MiniMax-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
83
+ </a>
84
+ </div>
85
+ <div align="center" style="line-height: 1;">
86
+ <a href="https://github.com/MiniMax-AI/MiniMax-MCP/blob/main/LICENSE" style="margin: 2px;">
87
+ <img alt="Code License" src="https://img.shields.io/badge/_Code_License-MIT-FF4040?style=flat-square&labelColor=2C3E50" style="display: inline-block; vertical-align: middle;"/>
88
+ </a>
89
+ </div>
90
+
91
+ <p align="center">
92
+ Specialized MiniMax Model Context Protocol (MCP) server designed for <a href="https://platform.minimax.io/docs/coding-plan/intro">coding-plan</a> users, featuring AI-powered search and vision analysis APIs optimized for code development workflows. Unlike the standard <a href="https://github.com/MiniMax-AI/MiniMax-MCP">MiniMax-MCP</a>, this version provides coding-specific tools (for examples: <code>web_search</code> and <code>understand_image</code>) that integrate seamlessly with MCP clients like <a href="https://www.anthropic.com/claude">Claude Desktop</a>, <a href="https://www.cursor.so">Cursor</a>, <a href="https://codeium.com/windsurf">Windsurf</a>, <a href="https://github.com/openai/openai-agents-python">OpenAI Agents</a> and others to enhance your coding experience.
93
+ </p>
94
+
95
+ ## Documentation
96
+ - [δΈ­ζ–‡ζ–‡ζ‘£](README-CN.md)
97
+
98
+
99
+ ## Quickstart with MCP Client
100
+ 1. Get your API key from [MiniMax](https://www.minimax.io/platform/user-center/basic-information/interface-key).
101
+ 2. Install `uv` (Python package manager), install with `curl -LsSf https://astral.sh/uv/install.sh | sh` or see the `uv` [repo](https://github.com/astral-sh/uv) for additional install methods.
102
+ 3. **Important**: The API host and key vary by region and must match; otherwise, you'll encounter an `Invalid API key` error.
103
+
104
+ |Region| Global | Mainland |
105
+ |:--|:-----|:-----|
106
+ |MINIMAX_API_KEY| go get from [MiniMax Global](https://www.minimax.io/platform/user-center/basic-information/interface-key) | go get from [MiniMax](https://platform.minimaxi.com/user-center/basic-information/interface-key) |
107
+ |MINIMAX_API_HOST| https://api.minimax.io | https://api.minimaxi.com |
108
+
109
+
110
+ ### Claude Desktop
111
+ Go to `Claude > Settings > Developer > Edit Config > claude_desktop_config.json` to include the following:
112
+
113
+ ```
114
+ {
115
+ "mcpServers": {
116
+ "MiniMax": {
117
+ "command": "uvx",
118
+ "args": [
119
+ "minimax-coding-plan-mcp",
120
+ "-y"
121
+ ],
122
+ "env": {
123
+ "MINIMAX_API_KEY": "insert-your-api-key-here",
124
+ "MINIMAX_API_HOST": "api host, https://api.minimax.io | https://api.minimaxi.com"
125
+ }
126
+ }
127
+ }
128
+ }
129
+
130
+ ```
131
+ ⚠️ Warning: The API key needs to match the host. If an error "API Error: invalid api key" occurs, please check your api host:
132
+ - Global Host:`https://api.minimax.io`
133
+ - Mainland Host:`https://api.minimaxi.com`
134
+
135
+ If you're using Windows, you will have to enable "Developer Mode" in Claude Desktop to use the MCP server. Click "Help" in the hamburger menu in the top left and select "Enable Developer Mode".
136
+
137
+
138
+ ### Cursor
139
+ Go to `Cursor -> Preferences -> Cursor Settings -> MCP -> Add new global MCP Server` to add above config.
140
+
141
+ That's it. Your MCP client can now interact with MiniMax through these tools:
142
+
143
+ ## Transport
144
+ We support two transport types: stdio and sse.
145
+ | stdio | SSE |
146
+ |:-----|:-----|
147
+ | Run locally | Can be deployed locally or in the cloud |
148
+ | Communication through `stdout` | Communication through `network` |
149
+ | Input: Supports processing `local files` or valid `URL` resources | Input: When deployed in the cloud, it is recommended to use `URL` for input |
150
+
151
+ ## Available Tools
152
+ | tool | description |
153
+ |-|-|
154
+ |`web_search`|Performs web searches and returns organic search results along with related search queries|
155
+ |`understand_image`|Analyzes images with AI based on text prompts, extracts information and answers questions about images|
156
+
157
+ ## Release Notes
158
+
159
+ ### November 20, 2025
160
+
161
+ #### πŸ†• What's New
162
+ - **Web Search**: New `web_search` tool - perform web searches and get organic results with related search queries
163
+ - **Vision Language Model**: New `understand_image` tool - analyze images using AI based on text prompts
164
+
165
+ #### πŸ“ˆ Features
166
+ - `web_search` - Search the web and get structured results including titles, links, snippets, and related searches
167
+ - `understand_image` - Analyze images from URLs or local files, supporting JPEG, PNG, and WebP formats
168
+
169
+ ## FAQ
170
+ ### 1. invalid api key
171
+ Please ensure your API key and API host are regionally aligned
172
+ |Region| Global | Mainland |
173
+ |:--|:-----|:-----|
174
+ |MINIMAX_API_KEY| go get from [MiniMax Global](https://www.minimax.io/platform/user-center/basic-information/interface-key) | go get from [MiniMax](https://platform.minimaxi.com/user-center/basic-information/interface-key) |
175
+ |MINIMAX_API_HOST| https://api.minimax.io | https://api.minimaxi.com |
176
+
177
+ ### 2. spawn uvx ENOENT
178
+ Please confirm its absolute path by running this command in your terminal:
179
+ ```sh
180
+ which uvx
181
+ ```
182
+ Once you obtain the absolute path (e.g., /usr/local/bin/uvx), update your configuration to use that path (e.g., "command": "/usr/local/bin/uvx").
183
+
184
+
185
+
186
+ ## Example usage
187
+
188
+ ⚠️ Warning: Using these tools may incur costs.
189
+
190
+ ### 1. Web Search
191
+ Use the `web_search` tool to search for information on the web:
192
+
193
+ <img src="https://cdn.hailuoai.video/moss/prod/2025-11-20-15/user/multi_chat_file/99ff15e3-e5d6-48e2-8216-38c6abf03c71.image/png" style="display:
194
+ inline-block; vertical-align: middle; "/>
195
+
196
+ ### 2. Image Analysis
197
+ Use the `understand_image` tool to analyze images with AI:
198
+
199
+ <img src="https://cdn.hailuoai.video/moss/prod/2025-11-20-15/user/multi_chat_file/1f8174a2-68d5-4576-b886-86933eab5280.image/png" style="display:
200
+ inline-block; vertical-align: middle; "/>
@@ -0,0 +1,17 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ setup.py
5
+ minimax_coding_plan_mcp.egg-info/PKG-INFO
6
+ minimax_coding_plan_mcp.egg-info/SOURCES.txt
7
+ minimax_coding_plan_mcp.egg-info/dependency_links.txt
8
+ minimax_coding_plan_mcp.egg-info/entry_points.txt
9
+ minimax_coding_plan_mcp.egg-info/requires.txt
10
+ minimax_coding_plan_mcp.egg-info/top_level.txt
11
+ minimax_mcp/__init__.py
12
+ minimax_mcp/__main__.py
13
+ minimax_mcp/client.py
14
+ minimax_mcp/const.py
15
+ minimax_mcp/exceptions.py
16
+ minimax_mcp/server.py
17
+ minimax_mcp/utils.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ minimax-coding-plan-mcp = minimax_mcp.server:main
@@ -0,0 +1,20 @@
1
+ mcp[cli]>=1.6.0
2
+ fastapi>=0.109.2
3
+ uvicorn>=0.27.1
4
+ python-dotenv>=1.0.1
5
+ pydantic>=2.6.1
6
+ httpx>=0.28.1
7
+ fuzzywuzzy>=0.18.0
8
+ python-Levenshtein>=0.25.0
9
+ sounddevice>=0.5.1
10
+ soundfile>=0.13.1
11
+ requests>=2.31.0
12
+
13
+ [dev]
14
+ pre-commit>=3.6.2
15
+ ruff>=0.3.0
16
+ fastmcp>=0.4.1
17
+ pytest>=8.0.0
18
+ pytest-cov>=4.1.0
19
+ twine>=6.1.0
20
+ build>=1.0.3
@@ -0,0 +1,3 @@
1
+ """Minimax Coding Plan MCP Server package."""
2
+
3
+ __version__ = "0.0.2"
@@ -0,0 +1,99 @@
1
+ import os
2
+ import json
3
+ from pathlib import Path
4
+ import sys
5
+ from dotenv import load_dotenv
6
+ import argparse
7
+
8
+ load_dotenv()
9
+
10
+
11
+ def get_claude_config_path() -> Path | None:
12
+ """Get the Claude config directory based on platform."""
13
+ if sys.platform == "win32":
14
+ path = Path(Path.home(), "AppData", "Roaming", "Claude")
15
+ elif sys.platform == "darwin":
16
+ path = Path(Path.home(), "Library", "Application Support", "Claude")
17
+ elif sys.platform.startswith("linux"):
18
+ path = Path(
19
+ os.environ.get("XDG_CONFIG_HOME", Path.home() / ".config"), "Claude"
20
+ )
21
+ else:
22
+ return None
23
+
24
+ if path.exists():
25
+ return path
26
+ return None
27
+
28
+
29
+ def get_python_path():
30
+ return sys.executable
31
+
32
+
33
+ def generate_config(api_key: str | None = None):
34
+ module_dir = Path(__file__).resolve().parent
35
+ server_path = module_dir / "server.py"
36
+ python_path = get_python_path()
37
+
38
+ final_api_key = api_key or os.environ.get("MINIMAX_API_KEY")
39
+ if not final_api_key:
40
+ print("Error: Minimax API key is required.")
41
+ print("Please either:")
42
+ print(" 1. Pass the API key using --api-key argument, or")
43
+ print(" 2. Set the MINIMAX_API_KEY environment variable, or")
44
+ print(" 3. Add MINIMAX_API_KEY to your .env file")
45
+ sys.exit(1)
46
+
47
+ config = {
48
+ "mcpServers": {
49
+ "Minimax": {
50
+ "command": "uvx",
51
+ "args": [
52
+ "minimax-coding-plan-mcp",
53
+ ],
54
+
55
+ "env": {
56
+ "MINIMAX_API_KEY": final_api_key,
57
+ "MINIMAX_API_HOST": "https://api.minimax.chat"
58
+ },
59
+ }
60
+ }
61
+ }
62
+
63
+ return config
64
+
65
+
66
+ if __name__ == "__main__":
67
+ parser = argparse.ArgumentParser()
68
+ parser.add_argument(
69
+ "--print",
70
+ action="store_true",
71
+ help="Print config to screen instead of writing to file",
72
+ )
73
+ parser.add_argument(
74
+ "--api-key",
75
+ help="Minimax API key (alternatively, set MINIMAX_API_KEY environment variable)",
76
+ )
77
+ parser.add_argument(
78
+ "--config-path",
79
+ type=Path,
80
+ help="Custom path to Claude config directory",
81
+ )
82
+ args = parser.parse_args()
83
+
84
+ config = generate_config(args.api_key)
85
+
86
+ if args.print:
87
+ print(json.dumps(config, indent=2))
88
+ else:
89
+ claude_path = args.config_path if args.config_path else get_claude_config_path()
90
+ if claude_path is None:
91
+ print(
92
+ "Could not find Claude config path automatically. Please specify it using --config-path argument. The argument should be an absolute path of the claude_desktop_config.json file."
93
+ )
94
+ sys.exit(1)
95
+
96
+ claude_path.mkdir(parents=True, exist_ok=True)
97
+ print("Writing config to", claude_path / "claude_desktop_config.json")
98
+ with open(claude_path / "claude_desktop_config.json", "w") as f:
99
+ json.dump(config, f, indent=2)
@@ -0,0 +1,104 @@
1
+ """Minimax API client base class."""
2
+
3
+ import requests
4
+ import urllib3
5
+ from typing import Any, Dict
6
+ from minimax_mcp.exceptions import MinimaxAuthError, MinimaxRequestError
7
+
8
+ # Disable SSL warnings for China region API
9
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
10
+
11
+ class MinimaxAPIClient:
12
+ """Base client for making requests to Minimax API."""
13
+
14
+ def __init__(self, api_key: str, api_host: str):
15
+ """Initialize the API client.
16
+
17
+ Args:
18
+ api_key: The API key for authentication
19
+ api_host: The API host URL
20
+ """
21
+ self.api_key = api_key
22
+ self.api_host = api_host
23
+ self.session = requests.Session()
24
+ self.session.headers.update({
25
+ 'Authorization': f'Bearer {api_key}',
26
+ 'MM-API-Source': 'Minimax-MCP'
27
+ })
28
+
29
+ def _make_request(
30
+ self,
31
+ method: str,
32
+ endpoint: str,
33
+ **kwargs
34
+ ) -> Dict[str, Any]:
35
+ """Make an HTTP request to the Minimax API.
36
+
37
+ Args:
38
+ method: HTTP method (GET, POST, etc.)
39
+ endpoint: API endpoint path
40
+ **kwargs: Additional arguments to pass to requests
41
+
42
+ Returns:
43
+ API response data as dictionary
44
+
45
+ Raises:
46
+ MinimaxAuthError: If authentication fails
47
+ MinimaxRequestError: If the request fails
48
+ """
49
+ url = f"{self.api_host}{endpoint}"
50
+
51
+ # Set Content-Type based on whether files are being uploaded
52
+ files = kwargs.get('files')
53
+ if not files:
54
+ self.session.headers['Content-Type'] = 'application/json'
55
+ else:
56
+ # Remove Content-Type header for multipart/form-data
57
+ # requests library will set it automatically with the correct boundary
58
+ self.session.headers.pop('Content-Type', None)
59
+
60
+ try:
61
+ # Disable SSL verification for api.minimaxi.com (China region)
62
+ # This is a workaround for SSL certificate verification issues
63
+ if 'verify' not in kwargs and 'minimaxi.com' in self.api_host:
64
+ kwargs['verify'] = False
65
+
66
+ response = self.session.request(method, url, **kwargs)
67
+
68
+ # Check for other HTTP errors
69
+ response.raise_for_status()
70
+
71
+ data = response.json()
72
+
73
+ # Check API-specific error codes
74
+ base_resp = data.get("base_resp", {})
75
+ if base_resp.get("status_code") != 0:
76
+ match base_resp.get("status_code"):
77
+ case 1004:
78
+ raise MinimaxAuthError(
79
+ f"API Error: {base_resp.get('status_msg')}, please check your API key and API host."
80
+ f"Trace-Id: {response.headers.get('Trace-Id')}"
81
+ )
82
+ case 2038:
83
+ raise MinimaxRequestError(
84
+ f"API Error: {base_resp.get('status_msg')}, should complete real-name verification on the open-platform(https://platform.minimaxi.com/user-center/basic-information)."
85
+ f"Trace-Id: {response.headers.get('Trace-Id')}"
86
+ )
87
+ case _:
88
+ raise MinimaxRequestError(
89
+ f"API Error: {base_resp.get('status_code')}-{base_resp.get('status_msg')} "
90
+ f"Trace-Id: {response.headers.get('Trace-Id')}"
91
+ )
92
+
93
+ return data
94
+
95
+ except requests.exceptions.RequestException as e:
96
+ raise MinimaxRequestError(f"Request failed: {str(e)}")
97
+
98
+ def get(self, endpoint: str, **kwargs) -> Dict[str, Any]:
99
+ """Make a GET request."""
100
+ return self._make_request("GET", endpoint, **kwargs)
101
+
102
+ def post(self, endpoint: str, **kwargs) -> Dict[str, Any]:
103
+ """Make a POST request."""
104
+ return self._make_request("POST", endpoint, **kwargs)
@@ -0,0 +1,4 @@
1
+ # ENV variables
2
+ ENV_MINIMAX_API_KEY = "MINIMAX_API_KEY"
3
+ ENV_MINIMAX_API_HOST = "MINIMAX_API_HOST"
4
+ ENV_FASTMCP_LOG_LEVEL = "FASTMCP_LOG_LEVEL"
@@ -0,0 +1,24 @@
1
+ """Custom exceptions for Minimax MCP."""
2
+
3
+ class MinimaxAPIError(Exception):
4
+ """Base exception for Minimax API errors."""
5
+ pass
6
+
7
+ class MinimaxAuthError(MinimaxAPIError):
8
+ """Authentication related errors."""
9
+ pass
10
+
11
+ class MinimaxRequestError(MinimaxAPIError):
12
+ """Request related errors."""
13
+ pass
14
+
15
+ class MinimaxTimeoutError(MinimaxAPIError):
16
+ """Timeout related errors."""
17
+ pass
18
+
19
+ class MinimaxValidationError(MinimaxAPIError):
20
+ """Validation related errors."""
21
+ pass
22
+
23
+ class MinimaxMcpError(MinimaxAPIError):
24
+ pass