axiomatic-mcp 0.0.1__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.
@@ -0,0 +1,217 @@
1
+ Metadata-Version: 2.4
2
+ Name: axiomatic-mcp
3
+ Version: 0.0.1
4
+ Summary: Modular MCP servers for Axiomatic_AI
5
+ Author-email: Axiomatic Team <developers@axiomatic.ai>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/axiomatic/ax-mcp
8
+ Project-URL: Issues, https://github.com/axiomatic/ax-mcp/issues
9
+ Keywords: mcp,axiomatic,ai,fastmcp
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ Requires-Dist: fastmcp>=0.1.0
21
+ Requires-Dist: pydantic>=2.0.0
22
+ Requires-Dist: python-dotenv>=1.0.0
23
+ Requires-Dist: httpx>=0.25.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
26
+ Requires-Dist: black>=23.0.0; extra == "dev"
27
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
28
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
29
+
30
+ # Axiomatic MCP Server
31
+
32
+ MCP (Model Context Protocol) server for the Axiomatic_AI platform, built with FastMCP in Python. Provides access to Axiomatic_AI's tools via MCP.
33
+
34
+ - **FastMCP-based server**: Built on the FastMCP framework for efficient MCP implementation
35
+ - **Axiomatic API integration**: Connects to Axiomatic AI's API for various tooling
36
+ - **Simple configuration**: Easy setup with API key environment variable
37
+
38
+ ## Installation
39
+
40
+ > **Important**: Not yet released to PyPi. Follow the developer for instructions for now
41
+
42
+ You can install each domain server independently based on your needs. These can be installed in many MCP clients such as cursor or claude.
43
+
44
+ **For PIC Domain:**
45
+
46
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=axiomatic-pic&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBheGlvbWF0aWMtbWNwIGF4aW9tYXRpYy1waWMiLCJlbnYiOnsiQVhJT01BVElDX0FQSV9LRVkiOiJFTlRFUiBZT1VSIEFQSSBLRVkifX0%3D)
47
+
48
+ ```json
49
+ {
50
+ "axiomatic-pic": {
51
+ "command": "uvx",
52
+ "args": ["--from", "axiomatic-mcp", "axiomatic-pic"],
53
+ "env": {
54
+ "AXIOMATIC_API_KEY": "your-api-key-here"
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ **For Documents:**
61
+
62
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=axiomatic-documents&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBheGlvbWF0aWMtbWNwIGF4aW9tYXRpYy1kb2N1bWVudHMiLCJlbnYiOnsiQVhJT01BVElDX0FQSV9LRVkiOiJFTlRFUiBZT1VSIEFQSSBLRVkifX0%3D)
63
+
64
+ ```json
65
+ {
66
+ "axiomatic-documents": {
67
+ "command": "uvx",
68
+ "args": ["--from", "axiomatic-mcp", "axiomatic-documents"],
69
+ "env": {
70
+ "AXIOMATIC_API_KEY": "your-api-key-here"
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## Development
77
+
78
+ 1. Clone the repository:
79
+
80
+ ```bash
81
+ git clone https://github.com/axiomatic/ax-mcp.git
82
+ cd ax-mcp
83
+ ```
84
+
85
+ 2. Install in development mode:
86
+
87
+ ```bash
88
+ make install-dev
89
+ ```
90
+
91
+ 3. Add servers to Cursor using Python module paths:
92
+
93
+ **For PIC Domain:**
94
+
95
+ ```json
96
+ {
97
+ "axiomatic-pic": {
98
+ "command": "python",
99
+ "args": ["-m", "axiomatic_mcp.servers.pic"],
100
+ "env": {
101
+ "AXIOMATIC_API_KEY": "your-api-key-here"
102
+ }
103
+ }
104
+ }
105
+ ```
106
+
107
+ **For Documents:**
108
+
109
+ ```json
110
+ {
111
+ "axiomatic-documents": {
112
+ "command": "python",
113
+ "args": ["-m", "axiomatic_mcp.servers.documents"],
114
+ "env": {
115
+ "AXIOMATIC_API_KEY": "your-api-key-here"
116
+ }
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### Project Structure
122
+
123
+ ```
124
+ ax-mcp/
125
+ ├── axiomatic_mcp/
126
+ │ ├── shared/ # Shared utilities
127
+ │ └── servers/ # Domain-specific servers
128
+ ├── pyproject.toml # Python package configuration
129
+ ```
130
+
131
+ ### Adding a New Server
132
+
133
+ 1. Create server directory:
134
+
135
+ ```bash
136
+ mkdir axiomatic_mcp/servers/my_domain
137
+ ```
138
+
139
+ 2. Create `__init__.py`:
140
+
141
+ ```python
142
+ from .server import MyDomainServer
143
+
144
+ def main():
145
+ server = MyDomainServer()
146
+ server.run()
147
+ ```
148
+
149
+ 2. Create `__main__.py`:
150
+
151
+ ```python
152
+ from . import main
153
+
154
+ if __name__ == "__main__":
155
+ main()
156
+ ```
157
+
158
+ 3. Implement server in `server.py`:
159
+
160
+ ```python
161
+ from fastmcp import FastMCP
162
+
163
+ mcp = FastMCP(
164
+ name="NAME",
165
+ instructions="""GIVE NICE INSTRUCTIONS""",
166
+ version="0.0.1",
167
+ )
168
+
169
+ @mcp.tool(
170
+ name="tool_name",
171
+ description="DESCRIPTION",
172
+ tags=["TAG"],
173
+ )
174
+ def my_tool():
175
+ pass
176
+
177
+ # Add more tools as needed
178
+ ```
179
+
180
+ 4. Add entry point to `pyproject.toml`:
181
+
182
+ ```toml
183
+ [project.scripts]
184
+ axiomatic-mydomain = "axiomatic_mcp.servers.my_domain:main"
185
+ ```
186
+
187
+ 5. Update README.md with instructions on installing your server. You can generate the "Add to cursor" button [here](https://docs.cursor.com/en/tools/developers)
188
+
189
+ ## Troubleshooting
190
+
191
+ ### Server not appearing in Cursor
192
+
193
+ 1. Restart Cursor after updating MCP settings
194
+ 2. Check the Output panel (View → Output → MCP) for errors
195
+ 3. Verify the command path is correct
196
+
197
+ ### Multiple servers overwhelming the LLM
198
+
199
+ Install only the domain servers you need. Each server runs independently, so you can add/remove them as needed.
200
+
201
+ ### API connection errors
202
+
203
+ 1. Verify your API key is set correctly
204
+ 2. Check internet connection
205
+
206
+ ## Release Process
207
+
208
+ ### Publishing a Release
209
+
210
+ 1. Create a new release branch
211
+ 1. Update version in `pyproject.toml`
212
+ 1. Commit and push changes
213
+ 1. Create a pull request titled "Release: YOUR FEATURE(s)". Include detailed description of what's included in the release.
214
+ 1. Create a GitHub release with tag `vX.Y.Z`
215
+ 1. GitHub Actions automatically publishes to PyPI
216
+
217
+ The package is available at: https://pypi.org/project/axiomatic-mcp/
@@ -0,0 +1,188 @@
1
+ # Axiomatic MCP Server
2
+
3
+ MCP (Model Context Protocol) server for the Axiomatic_AI platform, built with FastMCP in Python. Provides access to Axiomatic_AI's tools via MCP.
4
+
5
+ - **FastMCP-based server**: Built on the FastMCP framework for efficient MCP implementation
6
+ - **Axiomatic API integration**: Connects to Axiomatic AI's API for various tooling
7
+ - **Simple configuration**: Easy setup with API key environment variable
8
+
9
+ ## Installation
10
+
11
+ > **Important**: Not yet released to PyPi. Follow the developer for instructions for now
12
+
13
+ You can install each domain server independently based on your needs. These can be installed in many MCP clients such as cursor or claude.
14
+
15
+ **For PIC Domain:**
16
+
17
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=axiomatic-pic&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBheGlvbWF0aWMtbWNwIGF4aW9tYXRpYy1waWMiLCJlbnYiOnsiQVhJT01BVElDX0FQSV9LRVkiOiJFTlRFUiBZT1VSIEFQSSBLRVkifX0%3D)
18
+
19
+ ```json
20
+ {
21
+ "axiomatic-pic": {
22
+ "command": "uvx",
23
+ "args": ["--from", "axiomatic-mcp", "axiomatic-pic"],
24
+ "env": {
25
+ "AXIOMATIC_API_KEY": "your-api-key-here"
26
+ }
27
+ }
28
+ }
29
+ ```
30
+
31
+ **For Documents:**
32
+
33
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=axiomatic-documents&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBheGlvbWF0aWMtbWNwIGF4aW9tYXRpYy1kb2N1bWVudHMiLCJlbnYiOnsiQVhJT01BVElDX0FQSV9LRVkiOiJFTlRFUiBZT1VSIEFQSSBLRVkifX0%3D)
34
+
35
+ ```json
36
+ {
37
+ "axiomatic-documents": {
38
+ "command": "uvx",
39
+ "args": ["--from", "axiomatic-mcp", "axiomatic-documents"],
40
+ "env": {
41
+ "AXIOMATIC_API_KEY": "your-api-key-here"
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Development
48
+
49
+ 1. Clone the repository:
50
+
51
+ ```bash
52
+ git clone https://github.com/axiomatic/ax-mcp.git
53
+ cd ax-mcp
54
+ ```
55
+
56
+ 2. Install in development mode:
57
+
58
+ ```bash
59
+ make install-dev
60
+ ```
61
+
62
+ 3. Add servers to Cursor using Python module paths:
63
+
64
+ **For PIC Domain:**
65
+
66
+ ```json
67
+ {
68
+ "axiomatic-pic": {
69
+ "command": "python",
70
+ "args": ["-m", "axiomatic_mcp.servers.pic"],
71
+ "env": {
72
+ "AXIOMATIC_API_KEY": "your-api-key-here"
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ **For Documents:**
79
+
80
+ ```json
81
+ {
82
+ "axiomatic-documents": {
83
+ "command": "python",
84
+ "args": ["-m", "axiomatic_mcp.servers.documents"],
85
+ "env": {
86
+ "AXIOMATIC_API_KEY": "your-api-key-here"
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### Project Structure
93
+
94
+ ```
95
+ ax-mcp/
96
+ ├── axiomatic_mcp/
97
+ │ ├── shared/ # Shared utilities
98
+ │ └── servers/ # Domain-specific servers
99
+ ├── pyproject.toml # Python package configuration
100
+ ```
101
+
102
+ ### Adding a New Server
103
+
104
+ 1. Create server directory:
105
+
106
+ ```bash
107
+ mkdir axiomatic_mcp/servers/my_domain
108
+ ```
109
+
110
+ 2. Create `__init__.py`:
111
+
112
+ ```python
113
+ from .server import MyDomainServer
114
+
115
+ def main():
116
+ server = MyDomainServer()
117
+ server.run()
118
+ ```
119
+
120
+ 2. Create `__main__.py`:
121
+
122
+ ```python
123
+ from . import main
124
+
125
+ if __name__ == "__main__":
126
+ main()
127
+ ```
128
+
129
+ 3. Implement server in `server.py`:
130
+
131
+ ```python
132
+ from fastmcp import FastMCP
133
+
134
+ mcp = FastMCP(
135
+ name="NAME",
136
+ instructions="""GIVE NICE INSTRUCTIONS""",
137
+ version="0.0.1",
138
+ )
139
+
140
+ @mcp.tool(
141
+ name="tool_name",
142
+ description="DESCRIPTION",
143
+ tags=["TAG"],
144
+ )
145
+ def my_tool():
146
+ pass
147
+
148
+ # Add more tools as needed
149
+ ```
150
+
151
+ 4. Add entry point to `pyproject.toml`:
152
+
153
+ ```toml
154
+ [project.scripts]
155
+ axiomatic-mydomain = "axiomatic_mcp.servers.my_domain:main"
156
+ ```
157
+
158
+ 5. Update README.md with instructions on installing your server. You can generate the "Add to cursor" button [here](https://docs.cursor.com/en/tools/developers)
159
+
160
+ ## Troubleshooting
161
+
162
+ ### Server not appearing in Cursor
163
+
164
+ 1. Restart Cursor after updating MCP settings
165
+ 2. Check the Output panel (View → Output → MCP) for errors
166
+ 3. Verify the command path is correct
167
+
168
+ ### Multiple servers overwhelming the LLM
169
+
170
+ Install only the domain servers you need. Each server runs independently, so you can add/remove them as needed.
171
+
172
+ ### API connection errors
173
+
174
+ 1. Verify your API key is set correctly
175
+ 2. Check internet connection
176
+
177
+ ## Release Process
178
+
179
+ ### Publishing a Release
180
+
181
+ 1. Create a new release branch
182
+ 1. Update version in `pyproject.toml`
183
+ 1. Commit and push changes
184
+ 1. Create a pull request titled "Release: YOUR FEATURE(s)". Include detailed description of what's included in the release.
185
+ 1. Create a GitHub release with tag `vX.Y.Z`
186
+ 1. GitHub Actions automatically publishes to PyPI
187
+
188
+ The package is available at: https://pypi.org/project/axiomatic-mcp/
@@ -0,0 +1,3 @@
1
+ """Axiomatic MCP Servers - Modular MCP servers built with FastMCP."""
2
+
3
+ __version__ = "1.0.0"
@@ -0,0 +1,9 @@
1
+ """Domain-specific MCP servers."""
2
+
3
+ from .pic.server import mcp as pic_mcp
4
+
5
+ servers = [
6
+ pic_mcp,
7
+ ]
8
+
9
+ __all__ = ["pic_mcp"]
@@ -0,0 +1,5 @@
1
+ def main():
2
+ """Main entry point for the Documents server."""
3
+ from .server import mcp
4
+
5
+ mcp.run(transport="stdio")
@@ -0,0 +1,4 @@
1
+ from . import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1,46 @@
1
+ """Documents MCP server for filesystem document operations."""
2
+
3
+ from pathlib import Path
4
+ from typing import Annotated
5
+
6
+ from fastmcp import FastMCP
7
+ from fastmcp.tools.tool import ToolResult
8
+ from mcp.types import TextContent
9
+
10
+ from ...shared import AxiomaticAPIClient
11
+
12
+ mcp = FastMCP(
13
+ name="Axiomatic Documents Server",
14
+ instructions="""This server provides tools to read, analyze, and process documents
15
+ from the filesystem using the Axiomatic_AI Platform.""",
16
+ version="0.0.1",
17
+ )
18
+
19
+
20
+ @mcp.tool(
21
+ name="document_to_markdown",
22
+ description="Convert a PDF document to markdown using Axiomatic's advanced OCR.",
23
+ tags=["document", "filesystem", "analyze"],
24
+ )
25
+ async def document_to_markdown(
26
+ file_path: Annotated[Path, "The absolute path to the PDF file to analyze"],
27
+ ) -> ToolResult:
28
+ if not file_path.exists():
29
+ raise FileNotFoundError(f"Document not found: {file_path}")
30
+
31
+ if file_path.suffix.lower() != ".pdf":
32
+ raise ValueError("File must be a PDF")
33
+
34
+ file_content = file_path.read_bytes()
35
+ files = {"file": (file_path.name, file_content, "application/pdf")}
36
+ data = {"method": "mistral", "ocr": False, "layout_model": "doclayout_yolo"}
37
+
38
+ response = AxiomaticAPIClient().post("/document/parse", files=files, data=data)
39
+ markdown: str = response["markdown"]
40
+ name = file_path.stem + ".md"
41
+ return ToolResult(
42
+ content=[TextContent(type="text", text=f"Generated markdown for: {name}\n\n```markdown\n{markdown}\n```")],
43
+ structured_content={
44
+ "suggestions": [{"type": "create_file", "path": name, "content": markdown, "description": f"Create {name} with the generated markdown"}]
45
+ },
46
+ )
@@ -0,0 +1,5 @@
1
+ def main():
2
+ """Main entry point for the PIC server."""
3
+ from .server import mcp
4
+
5
+ mcp.run(transport="stdio")
@@ -0,0 +1,4 @@
1
+ from . import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1,48 @@
1
+ """PIC (Photonic Integrated Circuit) domain MCP server."""
2
+
3
+ from typing import Annotated
4
+
5
+ from fastmcp import FastMCP
6
+ from fastmcp.tools.tool import ToolResult
7
+ from mcp.types import TextContent
8
+
9
+ from ...shared import AxiomaticAPIClient
10
+
11
+ mcp = FastMCP(
12
+ name="Axiomatic PIC Designer",
13
+ instructions="""This server provides tools to design, optimize,
14
+ and simulate photonic integrated circuits.""",
15
+ version="0.0.1",
16
+ )
17
+
18
+
19
+ @mcp.tool(
20
+ name="design_circuit",
21
+ description="Design a photonic integrated circuit and optionally create a Python file",
22
+ tags=["design", "gfsfactory"],
23
+ )
24
+ async def design(
25
+ query: Annotated[str, "The query to design the circuit"],
26
+ existing_code: Annotated[str | None, "Existing code to use as a reference to refine"] = None,
27
+ ) -> ToolResult:
28
+ """Design a photonic integrated circuit."""
29
+ data = {
30
+ "query": query,
31
+ }
32
+
33
+ if existing_code:
34
+ data["code"] = existing_code
35
+
36
+ response = AxiomaticAPIClient().post("/pic/circuit/refine", data=data)
37
+ code: str = response["code"]
38
+
39
+ file_name = "circuit.py"
40
+
41
+ return ToolResult(
42
+ content=[TextContent(type="text", text=f"Generated photonic circuit design for: {file_name}\n\n```python\n{code}\n```")],
43
+ structured_content={
44
+ "suggestions": [
45
+ {"type": "create_file", "path": file_name, "content": code, "description": f"Create {file_name} with the generated circuit design"}
46
+ ]
47
+ },
48
+ )
@@ -0,0 +1,7 @@
1
+ """Shared utilities for Axiomatic MCP servers."""
2
+
3
+ from .api_client import AxiomaticAPIClient
4
+
5
+ __all__ = [
6
+ "AxiomaticAPIClient",
7
+ ]
@@ -0,0 +1,47 @@
1
+ import os
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ API_URL = "https://api.axiomatic-ai.com"
7
+ TIMEOUT = 1000
8
+
9
+
10
+ class AxiomaticAPIClient:
11
+ def __init__(self):
12
+ api_key = os.getenv("AXIOMATIC_API_KEY")
13
+ if not api_key:
14
+ raise ValueError("AXIOMATIC_API_KEY environment variable is not set")
15
+
16
+ self.client = httpx.Client(
17
+ base_url=API_URL,
18
+ timeout=TIMEOUT,
19
+ headers={
20
+ "X-API-Key": api_key,
21
+ },
22
+ )
23
+
24
+ def get(
25
+ self,
26
+ endpoint: str,
27
+ params: dict[str, Any] | None = None,
28
+ ) -> dict[str, Any]:
29
+ response = self.client.get(endpoint, params=params)
30
+ response.raise_for_status()
31
+ return response.json()
32
+
33
+ def post(
34
+ self,
35
+ endpoint: str,
36
+ data: dict[str, Any] | None = None,
37
+ files: dict[str, Any] | None = None,
38
+ ) -> dict[str, Any]:
39
+ response = self.client.post(endpoint, files=files, data=data) if files else self.client.post(endpoint, json=data)
40
+ response.raise_for_status()
41
+ return response.json()
42
+
43
+ def __enter__(self):
44
+ return self
45
+
46
+ def __exit__(self, exc_type, exc_val, exc_tb):
47
+ self.client.close()
@@ -0,0 +1,217 @@
1
+ Metadata-Version: 2.4
2
+ Name: axiomatic-mcp
3
+ Version: 0.0.1
4
+ Summary: Modular MCP servers for Axiomatic_AI
5
+ Author-email: Axiomatic Team <developers@axiomatic.ai>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/axiomatic/ax-mcp
8
+ Project-URL: Issues, https://github.com/axiomatic/ax-mcp/issues
9
+ Keywords: mcp,axiomatic,ai,fastmcp
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ Requires-Dist: fastmcp>=0.1.0
21
+ Requires-Dist: pydantic>=2.0.0
22
+ Requires-Dist: python-dotenv>=1.0.0
23
+ Requires-Dist: httpx>=0.25.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
26
+ Requires-Dist: black>=23.0.0; extra == "dev"
27
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
28
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
29
+
30
+ # Axiomatic MCP Server
31
+
32
+ MCP (Model Context Protocol) server for the Axiomatic_AI platform, built with FastMCP in Python. Provides access to Axiomatic_AI's tools via MCP.
33
+
34
+ - **FastMCP-based server**: Built on the FastMCP framework for efficient MCP implementation
35
+ - **Axiomatic API integration**: Connects to Axiomatic AI's API for various tooling
36
+ - **Simple configuration**: Easy setup with API key environment variable
37
+
38
+ ## Installation
39
+
40
+ > **Important**: Not yet released to PyPi. Follow the developer for instructions for now
41
+
42
+ You can install each domain server independently based on your needs. These can be installed in many MCP clients such as cursor or claude.
43
+
44
+ **For PIC Domain:**
45
+
46
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=axiomatic-pic&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBheGlvbWF0aWMtbWNwIGF4aW9tYXRpYy1waWMiLCJlbnYiOnsiQVhJT01BVElDX0FQSV9LRVkiOiJFTlRFUiBZT1VSIEFQSSBLRVkifX0%3D)
47
+
48
+ ```json
49
+ {
50
+ "axiomatic-pic": {
51
+ "command": "uvx",
52
+ "args": ["--from", "axiomatic-mcp", "axiomatic-pic"],
53
+ "env": {
54
+ "AXIOMATIC_API_KEY": "your-api-key-here"
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ **For Documents:**
61
+
62
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=axiomatic-documents&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBheGlvbWF0aWMtbWNwIGF4aW9tYXRpYy1kb2N1bWVudHMiLCJlbnYiOnsiQVhJT01BVElDX0FQSV9LRVkiOiJFTlRFUiBZT1VSIEFQSSBLRVkifX0%3D)
63
+
64
+ ```json
65
+ {
66
+ "axiomatic-documents": {
67
+ "command": "uvx",
68
+ "args": ["--from", "axiomatic-mcp", "axiomatic-documents"],
69
+ "env": {
70
+ "AXIOMATIC_API_KEY": "your-api-key-here"
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## Development
77
+
78
+ 1. Clone the repository:
79
+
80
+ ```bash
81
+ git clone https://github.com/axiomatic/ax-mcp.git
82
+ cd ax-mcp
83
+ ```
84
+
85
+ 2. Install in development mode:
86
+
87
+ ```bash
88
+ make install-dev
89
+ ```
90
+
91
+ 3. Add servers to Cursor using Python module paths:
92
+
93
+ **For PIC Domain:**
94
+
95
+ ```json
96
+ {
97
+ "axiomatic-pic": {
98
+ "command": "python",
99
+ "args": ["-m", "axiomatic_mcp.servers.pic"],
100
+ "env": {
101
+ "AXIOMATIC_API_KEY": "your-api-key-here"
102
+ }
103
+ }
104
+ }
105
+ ```
106
+
107
+ **For Documents:**
108
+
109
+ ```json
110
+ {
111
+ "axiomatic-documents": {
112
+ "command": "python",
113
+ "args": ["-m", "axiomatic_mcp.servers.documents"],
114
+ "env": {
115
+ "AXIOMATIC_API_KEY": "your-api-key-here"
116
+ }
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### Project Structure
122
+
123
+ ```
124
+ ax-mcp/
125
+ ├── axiomatic_mcp/
126
+ │ ├── shared/ # Shared utilities
127
+ │ └── servers/ # Domain-specific servers
128
+ ├── pyproject.toml # Python package configuration
129
+ ```
130
+
131
+ ### Adding a New Server
132
+
133
+ 1. Create server directory:
134
+
135
+ ```bash
136
+ mkdir axiomatic_mcp/servers/my_domain
137
+ ```
138
+
139
+ 2. Create `__init__.py`:
140
+
141
+ ```python
142
+ from .server import MyDomainServer
143
+
144
+ def main():
145
+ server = MyDomainServer()
146
+ server.run()
147
+ ```
148
+
149
+ 2. Create `__main__.py`:
150
+
151
+ ```python
152
+ from . import main
153
+
154
+ if __name__ == "__main__":
155
+ main()
156
+ ```
157
+
158
+ 3. Implement server in `server.py`:
159
+
160
+ ```python
161
+ from fastmcp import FastMCP
162
+
163
+ mcp = FastMCP(
164
+ name="NAME",
165
+ instructions="""GIVE NICE INSTRUCTIONS""",
166
+ version="0.0.1",
167
+ )
168
+
169
+ @mcp.tool(
170
+ name="tool_name",
171
+ description="DESCRIPTION",
172
+ tags=["TAG"],
173
+ )
174
+ def my_tool():
175
+ pass
176
+
177
+ # Add more tools as needed
178
+ ```
179
+
180
+ 4. Add entry point to `pyproject.toml`:
181
+
182
+ ```toml
183
+ [project.scripts]
184
+ axiomatic-mydomain = "axiomatic_mcp.servers.my_domain:main"
185
+ ```
186
+
187
+ 5. Update README.md with instructions on installing your server. You can generate the "Add to cursor" button [here](https://docs.cursor.com/en/tools/developers)
188
+
189
+ ## Troubleshooting
190
+
191
+ ### Server not appearing in Cursor
192
+
193
+ 1. Restart Cursor after updating MCP settings
194
+ 2. Check the Output panel (View → Output → MCP) for errors
195
+ 3. Verify the command path is correct
196
+
197
+ ### Multiple servers overwhelming the LLM
198
+
199
+ Install only the domain servers you need. Each server runs independently, so you can add/remove them as needed.
200
+
201
+ ### API connection errors
202
+
203
+ 1. Verify your API key is set correctly
204
+ 2. Check internet connection
205
+
206
+ ## Release Process
207
+
208
+ ### Publishing a Release
209
+
210
+ 1. Create a new release branch
211
+ 1. Update version in `pyproject.toml`
212
+ 1. Commit and push changes
213
+ 1. Create a pull request titled "Release: YOUR FEATURE(s)". Include detailed description of what's included in the release.
214
+ 1. Create a GitHub release with tag `vX.Y.Z`
215
+ 1. GitHub Actions automatically publishes to PyPI
216
+
217
+ The package is available at: https://pypi.org/project/axiomatic-mcp/
@@ -0,0 +1,18 @@
1
+ README.md
2
+ pyproject.toml
3
+ axiomatic_mcp/__init__.py
4
+ axiomatic_mcp.egg-info/PKG-INFO
5
+ axiomatic_mcp.egg-info/SOURCES.txt
6
+ axiomatic_mcp.egg-info/dependency_links.txt
7
+ axiomatic_mcp.egg-info/entry_points.txt
8
+ axiomatic_mcp.egg-info/requires.txt
9
+ axiomatic_mcp.egg-info/top_level.txt
10
+ axiomatic_mcp/servers/__init__.py
11
+ axiomatic_mcp/servers/documents/__init__.py
12
+ axiomatic_mcp/servers/documents/__main__.py
13
+ axiomatic_mcp/servers/documents/server.py
14
+ axiomatic_mcp/servers/pic/__init__.py
15
+ axiomatic_mcp/servers/pic/__main__.py
16
+ axiomatic_mcp/servers/pic/server.py
17
+ axiomatic_mcp/shared/__init__.py
18
+ axiomatic_mcp/shared/api_client.py
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ axiomatic-documents = axiomatic_mcp.servers.documents:main
3
+ axiomatic-pic = axiomatic_mcp.servers.pic:main
@@ -0,0 +1,10 @@
1
+ fastmcp>=0.1.0
2
+ pydantic>=2.0.0
3
+ python-dotenv>=1.0.0
4
+ httpx>=0.25.0
5
+
6
+ [dev]
7
+ pytest>=7.0.0
8
+ black>=23.0.0
9
+ ruff>=0.1.0
10
+ mypy>=1.0.0
@@ -0,0 +1 @@
1
+ axiomatic_mcp
@@ -0,0 +1,61 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "axiomatic-mcp"
7
+ version = "0.0.1"
8
+ description = "Modular MCP servers for Axiomatic_AI"
9
+ authors = [{name = "Axiomatic Team", email = "developers@axiomatic.ai"}]
10
+ readme = "README.md"
11
+ license = {text = "MIT"}
12
+ requires-python = ">=3.10"
13
+ classifiers = [
14
+ "Development Status :: 4 - Beta",
15
+ "Intended Audience :: Developers",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.10",
19
+ "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
21
+ "Topic :: Software Development :: Libraries :: Python Modules",
22
+ ]
23
+ keywords = ["mcp", "axiomatic", "ai", "fastmcp"]
24
+ urls = {Homepage = "https://github.com/axiomatic/ax-mcp", Issues = "https://github.com/axiomatic/ax-mcp/issues"}
25
+ dependencies = [
26
+ "fastmcp>=0.1.0",
27
+ "pydantic>=2.0.0",
28
+ "python-dotenv>=1.0.0",
29
+ "httpx>=0.25.0",
30
+ ]
31
+
32
+ [project.optional-dependencies]
33
+ dev = [
34
+ "pytest>=7.0.0",
35
+ "black>=23.0.0",
36
+ "ruff>=0.1.0",
37
+ "mypy>=1.0.0",
38
+ ]
39
+
40
+ [project.scripts]
41
+ axiomatic-pic = "axiomatic_mcp.servers.pic:main"
42
+ axiomatic-documents = "axiomatic_mcp.servers.documents:main"
43
+
44
+ [tool.setuptools.packages.find]
45
+ where = ["."]
46
+ include = ["axiomatic_mcp*"]
47
+
48
+ [tool.black]
49
+ line-length = 150
50
+ target-version = ["py310", "py311", "py312"]
51
+
52
+ [tool.ruff]
53
+ line-length = 150
54
+ target-version = "py310"
55
+ select = ["E", "F", "I", "N", "UP", "B", "C4", "PTH", "SIM", "RUF"]
56
+
57
+ [tool.mypy]
58
+ python_version = "3.10"
59
+ strict = true
60
+ warn_return_any = true
61
+ warn_unused_configs = true
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+