statuspro-mcp-server 0.1.0__tar.gz

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 (59) hide show
  1. statuspro_mcp_server-0.1.0/.claude-desktop-config.example.json +20 -0
  2. statuspro_mcp_server-0.1.0/.dockerignore +40 -0
  3. statuspro_mcp_server-0.1.0/.env.example +26 -0
  4. statuspro_mcp_server-0.1.0/.gitignore +179 -0
  5. statuspro_mcp_server-0.1.0/CHANGELOG.md +5 -0
  6. statuspro_mcp_server-0.1.0/Dockerfile +46 -0
  7. statuspro_mcp_server-0.1.0/MCP_CURSOR_SETUP.md +177 -0
  8. statuspro_mcp_server-0.1.0/PKG-INFO +352 -0
  9. statuspro_mcp_server-0.1.0/README.md +318 -0
  10. statuspro_mcp_server-0.1.0/docker-compose.yml +49 -0
  11. statuspro_mcp_server-0.1.0/docs/LOGGING.md +469 -0
  12. statuspro_mcp_server-0.1.0/docs/README.md +37 -0
  13. statuspro_mcp_server-0.1.0/docs/adr/0016-tool-interface-pattern.md +220 -0
  14. statuspro_mcp_server-0.1.0/docs/adr/0017-automated-tool-documentation.md +334 -0
  15. statuspro_mcp_server-0.1.0/docs/adr/README.md +41 -0
  16. statuspro_mcp_server-0.1.0/docs/deployment.md +388 -0
  17. statuspro_mcp_server-0.1.0/docs/development.md +376 -0
  18. statuspro_mcp_server-0.1.0/docs/docker.md +282 -0
  19. statuspro_mcp_server-0.1.0/docs/examples.md +133 -0
  20. statuspro_mcp_server-0.1.0/docs/index.md +1 -0
  21. statuspro_mcp_server-0.1.0/mcpb/.mcpbignore +18 -0
  22. statuspro_mcp_server-0.1.0/mcpb/manifest.template.json +54 -0
  23. statuspro_mcp_server-0.1.0/mcpb/pyproject.template.toml +34 -0
  24. statuspro_mcp_server-0.1.0/pyproject.toml +128 -0
  25. statuspro_mcp_server-0.1.0/src/statuspro_mcp/README.md +1 -0
  26. statuspro_mcp_server-0.1.0/src/statuspro_mcp/__init__.py +36 -0
  27. statuspro_mcp_server-0.1.0/src/statuspro_mcp/__main__.py +46 -0
  28. statuspro_mcp_server-0.1.0/src/statuspro_mcp/_fastmcp_patches.py +182 -0
  29. statuspro_mcp_server-0.1.0/src/statuspro_mcp/logging.py +321 -0
  30. statuspro_mcp_server-0.1.0/src/statuspro_mcp/prompts/__init__.py +15 -0
  31. statuspro_mcp_server-0.1.0/src/statuspro_mcp/resources/__init__.py +25 -0
  32. statuspro_mcp_server-0.1.0/src/statuspro_mcp/resources/help.py +84 -0
  33. statuspro_mcp_server-0.1.0/src/statuspro_mcp/resources/statuses.py +30 -0
  34. statuspro_mcp_server-0.1.0/src/statuspro_mcp/server.py +313 -0
  35. statuspro_mcp_server-0.1.0/src/statuspro_mcp/services/__init__.py +12 -0
  36. statuspro_mcp_server-0.1.0/src/statuspro_mcp/services/dependencies.py +35 -0
  37. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/__init__.py +20 -0
  38. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/list_coercion.py +87 -0
  39. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/orders.py +1098 -0
  40. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/param_types.py +22 -0
  41. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/prefab_ui.py +803 -0
  42. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/schemas.py +378 -0
  43. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/statuses.py +63 -0
  44. statuspro_mcp_server-0.1.0/src/statuspro_mcp/tools/tool_result_utils.py +115 -0
  45. statuspro_mcp_server-0.1.0/src/statuspro_mcp/unpack.py +266 -0
  46. statuspro_mcp_server-0.1.0/tests/__init__.py +1 -0
  47. statuspro_mcp_server-0.1.0/tests/conftest.py +62 -0
  48. statuspro_mcp_server-0.1.0/tests/test_logging.py +247 -0
  49. statuspro_mcp_server-0.1.0/tests/test_mcp_apps_integration.py +186 -0
  50. statuspro_mcp_server-0.1.0/tests/test_observability_decorators.py +336 -0
  51. statuspro_mcp_server-0.1.0/tests/test_package.py +47 -0
  52. statuspro_mcp_server-0.1.0/tests/test_unpack.py +272 -0
  53. statuspro_mcp_server-0.1.0/tests/tools/__init__.py +0 -0
  54. statuspro_mcp_server-0.1.0/tests/tools/test_batch_tools.py +375 -0
  55. statuspro_mcp_server-0.1.0/tests/tools/test_list_coercion.py +152 -0
  56. statuspro_mcp_server-0.1.0/tests/tools/test_orders_history_truncation.py +221 -0
  57. statuspro_mcp_server-0.1.0/tests/tools/test_prefab_ui.py +630 -0
  58. statuspro_mcp_server-0.1.0/tests/tools/test_result_schemas.py +67 -0
  59. statuspro_mcp_server-0.1.0/tests/tools/test_tool_result_utils.py +73 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "mcpServers": {
3
+ "statuspro-erp-dev": {
4
+ "command": "/Users/YOUR_USERNAME/.local/bin/uv",
5
+ "args": ["run", "mcp-hmr", "src/statuspro_mcp/server.py:mcp"],
6
+ "cwd": "/REPLACE/WITH/YOUR/PATH/TO/statuspro-openapi-client/statuspro_mcp_server",
7
+ "env": {
8
+ "STATUSPRO_API_KEY": "${STATUSPRO_API_KEY}",
9
+ "STATUSPRO_BASE_URL": "https://app.orderstatuspro.com/api/v1"
10
+ }
11
+ },
12
+ "statuspro-erp": {
13
+ "command": "statuspro-mcp-server",
14
+ "env": {
15
+ "STATUSPRO_API_KEY": "${STATUSPRO_API_KEY}",
16
+ "STATUSPRO_BASE_URL": "https://app.orderstatuspro.com/api/v1"
17
+ }
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,40 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+ .eggs/
11
+
12
+ # Testing
13
+ .pytest_cache/
14
+ .coverage
15
+ htmlcov/
16
+ .tox/
17
+
18
+ # Virtual environments
19
+ venv/
20
+ env/
21
+ ENV/
22
+
23
+ # IDE
24
+ .vscode/
25
+ .idea/
26
+ *.swp
27
+ *.swo
28
+ *~
29
+
30
+ # Git
31
+ .git/
32
+ .gitignore
33
+
34
+ # Documentation (not needed in container)
35
+ docs/
36
+ *.md
37
+ !README.md
38
+
39
+ # Deployment files
40
+ DEPLOYMENT.md
@@ -0,0 +1,26 @@
1
+ # StatusPro MCP Server Configuration
2
+ # Copy to .env and fill in your values, or set in your environment.
3
+
4
+ # Required: Your StatusPro API key (from StatusPro account settings)
5
+ STATUSPRO_API_KEY=your-api-key-here
6
+
7
+ # Optional: Override the StatusPro API base URL
8
+ # STATUSPRO_BASE_URL=https://app.orderstatuspro.com/api/v1
9
+
10
+ # Optional: Override the MCP server port (default: 8765)
11
+ # MCP_PORT=8765
12
+
13
+ # --- Authentication (for HTTP transport) ---
14
+ # Without auth, the MCP endpoint is open to anyone with the URL.
15
+ # Choose ONE of the options below.
16
+
17
+ # Option 1: Bearer token (simple, for dev/personal use)
18
+ # Set a secret token — clients must send "Authorization: Bearer <token>"
19
+ # MCP_AUTH_TOKEN=your-secret-token-here
20
+
21
+ # Option 2: GitHub OAuth (production)
22
+ # Create a GitHub OAuth App: https://github.com/settings/developers
23
+ # Set the callback URL to: <your-base-url>/auth/callback
24
+ # MCP_GITHUB_CLIENT_ID=your-github-client-id
25
+ # MCP_GITHUB_CLIENT_SECRET=your-github-client-secret
26
+ # MCP_BASE_URL=https://your-public-url.ngrok-free.app
@@ -0,0 +1,179 @@
1
+ # This file is used to specify files and directories that should be ignored by Git.
2
+ # It is a common practice to include this file in the root of a repository.
3
+ # For more information, see https://git-scm.com/docs/gitignore
4
+
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+
10
+ # C extensions
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ .Python
15
+ env/
16
+ build/
17
+ develop-eggs/
18
+ dist/
19
+ downloads/
20
+ eggs/
21
+ .eggs/
22
+ lib/
23
+ lib64/
24
+ parts/
25
+ sdist/
26
+ var/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *,cover
50
+ .hypothesis/
51
+ venv/
52
+ .venv/
53
+ .python-version
54
+ .pytest_cache
55
+
56
+ # Translations
57
+ *.mo
58
+ *.pot
59
+
60
+ # Django stuff:
61
+ *.log
62
+
63
+ # MkDocs documentation
64
+ site/
65
+ docs/_build/
66
+ docs/autoapi/
67
+ docs/*.log
68
+ docs/all_warnings.txt
69
+ docs/full_build_output.txt
70
+
71
+ # PyBuilder
72
+ target/
73
+
74
+ #Ipython Notebook
75
+ .ipynb_checkpoints
76
+
77
+ # dotenv
78
+ .env
79
+ .env.*
80
+ !.env.example
81
+
82
+ # Logs directory
83
+ logs/
84
+
85
+ # IDE and Editor files
86
+ .vscode/
87
+ .idea/
88
+ .cursor/.mcp.json
89
+ *.swp
90
+ *.swo
91
+ *~
92
+ .claude/settings.local.json
93
+
94
+ # macOS
95
+ .DS_Store
96
+ .AppleDouble
97
+ .LSOverride
98
+
99
+ # Windows
100
+ Thumbs.db
101
+ ehthumbs.db
102
+ Desktop.ini
103
+ $RECYCLE.BIN/
104
+
105
+ # MyPy type checker
106
+ .mypy_cache/
107
+ .dmypy.json
108
+ dmypy.json
109
+
110
+ # Pyre type checker
111
+ .pyre/
112
+
113
+ # pytype static type analyzer
114
+ .pytype/
115
+
116
+ # Security and secrets
117
+ *.key
118
+ *.pem
119
+ *.p12
120
+ secrets/
121
+ credentials/
122
+
123
+ # Temporary files
124
+ tmp/
125
+ temp/
126
+ *.tmp
127
+ *.bak
128
+ *.backup
129
+
130
+ # Build artifacts from Poetry packaging
131
+ build/
132
+ dist/
133
+ *.tar.gz
134
+ *.whl
135
+
136
+ # SARIF security scan results
137
+ *.sarif
138
+
139
+ # Local development and debug files
140
+ debug_*.py
141
+ demo_*.py
142
+ enhanced_client_example.py
143
+ enhanced_client_v2*.py
144
+ simple_test_client.py
145
+ test_client.py
146
+ test_defaults.py
147
+ test_lint_integration.py
148
+ test_pagination*.py
149
+ test_poetry_client.py
150
+ debug_pagination.py
151
+ debug_products.py
152
+ demo_transport.py
153
+ quick_test_*.py
154
+
155
+ # Keep important test files (in tests/ directory)
156
+ !tests/
157
+
158
+ # Generated API documentation
159
+ api_docs/
160
+ openapi_docs/
161
+
162
+ # Backup files
163
+ *.orig
164
+ *.rej
165
+
166
+ # Coverage and analysis files
167
+ coverage.json
168
+ api_analysis_results.json
169
+ validation_results.json
170
+
171
+ # Generated MCP metadata
172
+ tools.json
173
+
174
+ # Claude
175
+ .claude/settings.local.json
176
+
177
+ # Node.js / TypeScript packages
178
+ node_modules/
179
+ *.tsbuildinfo
@@ -0,0 +1,5 @@
1
+ # CHANGELOG
2
+
3
+ All notable changes to the StatusPro MCP Server will be documented in this file.
4
+
5
+ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
@@ -0,0 +1,46 @@
1
+ # StatusPro MCP Server Docker Image
2
+ # Provides an isolated, secure environment for running the StatusPro Manufacturing ERP MCP server
3
+ # Compatible with Docker MCP Catalog and Toolkit
4
+ #
5
+ # Supports multiple transport modes via MCP_TRANSPORT env var:
6
+ # - streamable-http (default): HTTP transport for Claude.ai co-work and remote clients
7
+ # - stdio: Standard I/O for Claude Desktop and Claude Code
8
+ # - sse: Server-Sent Events for Cursor IDE
9
+
10
+ FROM python:3.14-slim
11
+
12
+ # Metadata
13
+ LABEL org.opencontainers.image.title="StatusPro MCP Server"
14
+ LABEL org.opencontainers.image.description="Model Context Protocol server for StatusPro Manufacturing ERP"
15
+ LABEL org.opencontainers.image.version="0.1.0"
16
+ LABEL org.opencontainers.image.vendor="Doug Borg"
17
+ LABEL org.opencontainers.image.source="https://github.com/dougborg/statuspro-openapi-client"
18
+ LABEL org.opencontainers.image.licenses="MIT"
19
+
20
+ # Set working directory
21
+ WORKDIR /app
22
+
23
+ # Install uv for fast dependency installation
24
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
25
+
26
+ # Copy dependency files and source code
27
+ COPY pyproject.toml /app/
28
+ COPY src/ /app/src/
29
+ COPY README.md /app/
30
+
31
+ # Install package (--no-sources skips workspace reference, resolves from PyPI)
32
+ RUN uv pip install --system --no-cache --no-sources .
33
+
34
+ # Create non-root user for security
35
+ RUN useradd -m -u 1000 mcp && \
36
+ chown -R mcp:mcp /app
37
+ USER mcp
38
+
39
+ # Environment variables (can be overridden at runtime)
40
+ ENV STATUSPRO_BASE_URL="https://app.orderstatuspro.com/api/v1"
41
+ # Expose HTTP port (used by streamable-http, http, and sse transports)
42
+ EXPOSE 8765
43
+
44
+ # Run the MCP server with configurable transport
45
+ ENTRYPOINT ["python", "-m", "statuspro_mcp"]
46
+ CMD ["--transport", "streamable-http", "--host", "0.0.0.0", "--port", "8765"]
@@ -0,0 +1,177 @@
1
+ # StatusPro MCP Server - Cursor IDE Setup
2
+
3
+ This guide explains how to run the StatusPro MCP server independently and connect Cursor
4
+ IDE to it via SSE transport. For Claude.ai co-work or other HTTP clients, see the
5
+ [Docker guide](docs/docker.md) or the [README](README.md).
6
+
7
+ ## Quick Start
8
+
9
+ ### 1. Start the MCP Server
10
+
11
+ Run the startup script from the project root:
12
+
13
+ ```bash
14
+ ./scripts/start_mcp_server.sh
15
+ ```
16
+
17
+ Or manually:
18
+
19
+ ```bash
20
+ cd statuspro_mcp_server
21
+ uv run python -m statuspro_mcp --transport sse --port 8765
22
+ ```
23
+
24
+ The server will start on `http://127.0.0.1:8765/sse`
25
+
26
+ ### 2. Configure Cursor IDE
27
+
28
+ The `.mcp.json` file in the project root is already configured to connect to the server:
29
+
30
+ ```json
31
+ {
32
+ "mcpServers": {
33
+ "statuspro-erp": {
34
+ "type": "sse",
35
+ "url": "http://127.0.0.1:8765/sse"
36
+ }
37
+ }
38
+ }
39
+ ```
40
+
41
+ ### 3. Restart Cursor IDE
42
+
43
+ After starting the server, restart Cursor IDE to load the MCP configuration.
44
+
45
+ ## Configuration Options
46
+
47
+ ### Custom Port
48
+
49
+ To use a different port:
50
+
51
+ 1. Start the server with custom port:
52
+
53
+ ```bash
54
+ ./scripts/start_mcp_server.sh --port 9000
55
+ ```
56
+
57
+ 1. Update `.mcp.json`:
58
+
59
+ ```json
60
+ "statuspro-erp": {
61
+ "type": "sse",
62
+ "url": "http://127.0.0.1:9000/sse"
63
+ }
64
+ ```
65
+
66
+ ### Custom Host
67
+
68
+ To listen on all interfaces (for remote access):
69
+
70
+ ```bash
71
+ ./scripts/start_mcp_server.sh --host 0.0.0.0 --port 8765
72
+ ```
73
+
74
+ **Security Note**: Only expose the server on public interfaces if you have proper
75
+ authentication/authorization in place.
76
+
77
+ ### HTTP Transport
78
+
79
+ To use HTTP transport instead of SSE:
80
+
81
+ ```bash
82
+ ./scripts/start_mcp_server.sh --transport http
83
+ ```
84
+
85
+ Then update `.mcp.json`:
86
+
87
+ ```json
88
+ "statuspro-erp": {
89
+ "type": "http",
90
+ "url": "http://127.0.0.1:8765"
91
+ }
92
+ ```
93
+
94
+ ### Streamable HTTP Transport
95
+
96
+ For Claude.ai co-work or other MCP clients that support streamable-http:
97
+
98
+ ```bash
99
+ ./scripts/start_mcp_server.sh --transport streamable-http
100
+ ```
101
+
102
+ The server will be available at `http://127.0.0.1:8765/mcp`.
103
+
104
+ ## Environment Variables
105
+
106
+ The server requires the following environment variables:
107
+
108
+ - `STATUSPRO_API_KEY` (required): Your StatusPro API key
109
+ - `STATUSPRO_BASE_URL` (optional): API base URL (default:
110
+ `https://app.orderstatuspro.com/api/v1`)
111
+
112
+ Set them in your `.env` file or export them:
113
+
114
+ ```bash
115
+ export STATUSPRO_API_KEY=your-api-key-here
116
+ export STATUSPRO_BASE_URL=https://app.orderstatuspro.com/api/v1 # Optional
117
+ ```
118
+
119
+ ## Troubleshooting
120
+
121
+ ### Server won't start
122
+
123
+ 1. Check that `STATUSPRO_API_KEY` is set:
124
+
125
+ ```bash
126
+ echo $STATUSPRO_API_KEY
127
+ ```
128
+
129
+ 1. Verify dependencies are installed:
130
+
131
+ ```bash
132
+ cd statuspro_mcp_server
133
+ uv sync
134
+ ```
135
+
136
+ 1. Check if port is already in use:
137
+
138
+ ```bash
139
+ lsof -i :8765
140
+ ```
141
+
142
+ ### Cursor can't connect
143
+
144
+ 1. Verify the server is running:
145
+
146
+ ```bash
147
+ curl http://127.0.0.1:8765/sse
148
+ ```
149
+
150
+ 1. Check the URL in `.mcp.json` matches the server URL
151
+
152
+ 1. Restart Cursor IDE after configuration changes
153
+
154
+ 1. Check Cursor's MCP server logs for connection errors
155
+
156
+ ### Tools not appearing
157
+
158
+ 1. Verify the server started successfully (check startup logs)
159
+
160
+ 1. Ensure Cursor IDE has been restarted after configuration changes
161
+
162
+ 1. Check that the MCP server appears in Cursor's MCP server list
163
+
164
+ ## Development Mode
165
+
166
+ For development with hot-reload, see [DEVELOPMENT.md](docs/development.md).
167
+
168
+ ## Production Deployment
169
+
170
+ For production deployment, consider:
171
+
172
+ - Running the server as a systemd service or similar
173
+ - Using a reverse proxy (nginx, Caddy) for HTTPS
174
+ - Implementing proper authentication/authorization
175
+ - Setting up monitoring and logging
176
+
177
+ See the [Docker documentation](docs/docker.md) for containerized deployment options.