nexatron-mcp 1.0.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.
@@ -0,0 +1,27 @@
1
+ # Build artifacts
2
+ dist/
3
+ build/
4
+ *.egg-info/
5
+ *.egg
6
+
7
+ # Test / coverage artifacts
8
+ .pytest_cache/
9
+ .mypy_cache/
10
+ .ruff_cache/
11
+ coverage.xml
12
+ .coverage
13
+ htmlcov/
14
+
15
+ # Virtual environments (local development)
16
+ .venv/
17
+ .test-venv/
18
+ venv/
19
+
20
+ # Python bytecode
21
+ __pycache__/
22
+ *.py[cod]
23
+ *$py.class
24
+
25
+ # OS
26
+ .DS_Store
27
+ Thumbs.db
@@ -0,0 +1,59 @@
1
+ # Changelog
2
+
3
+ All notable changes to `nexatron-mcp` are documented here.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ### Fixed
10
+ - `pyproject.toml` version was incorrectly set to `2.0.0` with a description advertising an aspirational `ask` / `query_metric` / `compare_metric_across_sources` / `explain_metric` tool surface that was never shipped. Reset to `1.0.0` to match the actual 12-tool surface documented in this changelog and in `README.md`. No code or behavior change for installed users.
11
+
12
+ ## [1.0.0] — 2026-04-17
13
+
14
+ **Production release** — the `nexatron-mcp` package is now a production-grade, enterprise-supported MCP server from **dotSolved Systems**, backed by SOC 2 Type 1 and ISO 27001 corporate compliance (Type 2 in progress).
15
+
16
+ ### Added
17
+ - **12 MCP tools** exposed to Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and any other MCP-compatible AI client:
18
+ - `query` — ask questions about enterprise data in plain English; returns answer, generated SQL, result preview, and confidence score.
19
+ - `list_connections` — list all configured data source connections (Postgres, MySQL, SQL Server, BigQuery, Snowflake, Redshift, Databricks, Salesforce, S3).
20
+ - `get_schema` — fetch the schema for a specific connection (tables, columns, types).
21
+ - `test_connection` — verify connectivity and credentials.
22
+ - `detect_schema_drift` — report schema changes (added / removed / type-changed columns).
23
+ - `list_metrics` — list all metrics in the Nexatron semantic layer with certification status.
24
+ - `list_views` — list logical views defined in the semantic layer.
25
+ - `search_knowledge_base` — semantic search over ingested PDFs, docs, and unstructured sources (RAG).
26
+ - `list_conversations` — list recent query conversations for the authenticated user.
27
+ - `get_report` — retrieve a saved report by ID.
28
+ - `get_credit_balance` — check remaining query credits for the tenant.
29
+ - `whoami` — return the authenticated user and tenant context.
30
+ - **1 MCP resource**: `nexatron://platform/info` — live platform overview and capabilities manifest.
31
+ - **Two transport modes**:
32
+ - `stdio` (default) — for local AI clients (Claude Desktop, Cursor, VS Code, Windsurf).
33
+ - `sse` — Server-Sent Events for remote / cloud AI clients (including claude.ai custom integrations when used with the Nexatron backend's remote MCP endpoint).
34
+ - **Authentication**: Nexatron API keys (`nxa_*` prefix), stored SHA-256 hashed on the backend. Per-key scopes, expiration, IP allowlist, and revocation via `POST /api/v1/admin/api-keys`.
35
+ - **Tenant isolation**: every tool call is enforced through Nexatron's frozen `TenantContext` + four-layer row-level security, so an API key never sees another tenant's data.
36
+ - **BYO-LLM**: inherits the Nexatron tenant's Smart LLM Router configuration — queries route through the customer's Azure OpenAI, Bedrock, Anthropic, or Ollama contract with no vendor lock-in at the MCP layer.
37
+ - **Cryptographic audit trail**: every tool call is recorded in the Nexatron per-tenant audit log with HKDF-SHA256 export signing.
38
+
39
+ ### Quality
40
+ - Full PEP 561 typing support (`py.typed` marker distributed in the wheel).
41
+ - Strict `mypy` type-check clean.
42
+ - `ruff` lint clean with security rules enabled (flake8-bandit).
43
+ - `pytest` suite with ≥70% coverage gate.
44
+ - GitHub Actions CI: test on every PR, auto-publish to PyPI on signed tag.
45
+
46
+ ### Security
47
+ - See [SECURITY.md](SECURITY.md) for the responsible disclosure policy.
48
+ - No secrets ever logged; API key only transits the `Authorization: Bearer` header.
49
+ - Explicit `httpx` timeout defaults; no unbounded network calls.
50
+
51
+ ### Compatibility
52
+ - Requires Python ≥ 3.10.
53
+ - Tested on Python 3.10, 3.11, 3.12, 3.13 in CI.
54
+ - Tested against Nexatron API ≥ v1.0.0.
55
+ - Compatible with every MCP client implementing the 2024-11 protocol spec (at minimum: Claude Desktop, Claude Code, Cursor, VS Code MCP, Windsurf).
56
+
57
+ ## [0.1.0] — 2026-02 (internal beta)
58
+
59
+ Initial beta release to dotSolved design-partner customers. Not published to PyPI.
@@ -0,0 +1,136 @@
1
+ # Contributing to nexatron-mcp
2
+
3
+ Thanks for your interest in contributing to the Nexatron MCP server. This package is maintained by **dotSolved Systems** as part of the Nexatron platform; contributions from the community are welcome and reviewed by the Nexatron engineering team.
4
+
5
+ ## Ground rules
6
+
7
+ 1. **Open an issue first** for anything larger than a one-line fix. This lets us discuss design before you invest time.
8
+ 2. **Every change must be tested.** Pull requests without tests will be asked to add them.
9
+ 3. **Every change must pass CI.** `ruff`, `mypy --strict`, and `pytest` all must be green. The CI gate is automatic on every PR.
10
+ 4. **Do not break the public API.** The tools exposed to MCP clients (`query`, `list_connections`, etc.) are part of the public contract; changing their name, parameters, or response shape is a breaking change and requires a major version bump.
11
+ 5. **Security-sensitive changes** (authentication, request signing, secrets handling) require a two-person review — one Nexatron engineer and one dotSolved security reviewer.
12
+
13
+ ## Development setup
14
+
15
+ ```bash
16
+ # From the repo root
17
+ cd packages/mcp-server
18
+
19
+ # Create and activate a virtual environment
20
+ python -m venv .venv
21
+ source .venv/bin/activate # on Windows: .venv\Scripts\activate
22
+
23
+ # Install the package in editable mode with dev extras
24
+ pip install -e ".[dev]"
25
+
26
+ # Verify the install
27
+ nexatron-mcp --help
28
+ ```
29
+
30
+ ## Running the tests
31
+
32
+ ```bash
33
+ # Fast unit tests
34
+ pytest
35
+
36
+ # Verbose with coverage summary
37
+ pytest -v
38
+
39
+ # With coverage HTML report
40
+ pytest --cov-report=html && open htmlcov/index.html
41
+ ```
42
+
43
+ The coverage gate is **70%**. Drops below that fail CI.
44
+
45
+ ## Linting and type checking
46
+
47
+ ```bash
48
+ # Lint (auto-fix where possible)
49
+ ruff check --fix .
50
+
51
+ # Format
52
+ ruff format .
53
+
54
+ # Type check (strict)
55
+ mypy src/nexatron_mcp
56
+ ```
57
+
58
+ ## Pull request checklist
59
+
60
+ Before opening a PR, please ensure:
61
+
62
+ - [ ] Tests pass locally (`pytest`).
63
+ - [ ] Lint passes (`ruff check .`).
64
+ - [ ] Type check passes (`mypy src/nexatron_mcp`).
65
+ - [ ] You added or updated tests for the behavior you changed.
66
+ - [ ] You updated [CHANGELOG.md](CHANGELOG.md) with your change under `[Unreleased]`.
67
+ - [ ] You updated [README.md](README.md) if the public API or install instructions changed.
68
+ - [ ] For tool additions: the new tool has a clear docstring, parameter types, and at least one example in the PR description.
69
+
70
+ ## Commit messages
71
+
72
+ We use [Conventional Commits](https://www.conventionalcommits.org/):
73
+
74
+ - `feat(tools): add list_tenants tool`
75
+ - `fix(client): handle httpx timeout gracefully`
76
+ - `docs(readme): clarify sse setup for claude.ai`
77
+ - `test(server): cover credit_balance edge cases`
78
+ - `chore(ci): upgrade actions/checkout to v5`
79
+
80
+ ## Release process
81
+
82
+ Releases are cut by Nexatron engineering maintainers. The sequence:
83
+
84
+ 1. Update `version` in [pyproject.toml](pyproject.toml), `__version__` in `src/nexatron_mcp/__init__.py`, **and both `version` fields in [server.json](server.json)** (top-level + `packages[0].version`). The publish workflow refuses to ship unless all three agree with the tag.
85
+ 2. Move entries from `[Unreleased]` to a new dated section in [CHANGELOG.md](CHANGELOG.md).
86
+ 3. Open a PR titled `release: mcp-server-v<new-version>`; merge when approved and green.
87
+ 4. Tag the merge commit: `git tag mcp-server-vX.Y.Z && git push --tags`. The package-scoped prefix avoids overlap with Nexatron platform release tags.
88
+ 5. The [`mcp-publish`](../../.github/workflows/mcp-publish.yml) workflow picks up the tag, builds the wheel + sdist, publishes to PyPI via OIDC trusted publishing (no long-lived token), then publishes [`server.json`](server.json) to the MCP Registry at [`registry.modelcontextprotocol.io`](https://registry.modelcontextprotocol.io) using `mcp-publisher login github-oidc`.
89
+
90
+ ### First-publish runbook (one-time setup)
91
+
92
+ The OIDC paths above need two one-time configurations before the first tag works end-to-end:
93
+
94
+ **1. PyPI trusted publisher.** A PyPI account with maintainer permission on the `nexatron-mcp` project (or an admin who can create it) registers this repo as a trusted publisher at <https://pypi.org/manage/account/publishing/>:
95
+
96
+ - Owner: `sravanmodugula-solved`
97
+ - Repository: `nexatron`
98
+ - Workflow filename: `mcp-publish.yml`
99
+ - Environment: leave blank (the workflow does not use a deployment environment)
100
+
101
+ No client secret is exchanged; PyPI verifies the OIDC `id-token` matches the configured repo + workflow at publish time. If the `nexatron-mcp` project does not yet exist on PyPI, the first publish creates it under the account that authorized the trusted publisher.
102
+
103
+ **2. MCP Registry namespace ownership.** The namespace `io.github.sravanmodugula-solved/...` is verified by GitHub OIDC at publish time — there is no separate registration step. The verification logic checks that the OIDC `repository_owner` claim equals `sravanmodugula-solved`, so any tag pushed from a fork (different owner) will be rejected. To migrate to a custom domain namespace like `ai.dotsolved.nexatron/mcp`, set up a DNS TXT record per the [MCP Registry DNS auth docs](https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/authentication.mdx) and change the `login` step in `mcp-publish.yml` to `dns` auth.
104
+
105
+ ### Verifying a release end to end
106
+
107
+ After the workflow finishes, confirm the release on both sides:
108
+
109
+ ```bash
110
+ # PyPI
111
+ pip index versions nexatron-mcp # should show the new version
112
+ uvx nexatron-mcp@<version> --help # smoke-test the published artifact
113
+
114
+ # MCP Registry
115
+ curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=nexatron" | jq .
116
+ ```
117
+
118
+ The Cursor + Claude Desktop discovery surfaces consume the registry, so a successful registry publish is the discovery-flow handoff — there is no separate Cursor or Anthropic Console submission.
119
+
120
+ ### Dry run
121
+
122
+ To validate the workflow without publishing:
123
+
124
+ ```bash
125
+ gh workflow run mcp-publish.yml -f dry_run=true
126
+ ```
127
+
128
+ The dry run still builds the sdist + wheel and installs `mcp-publisher`, so it catches packaging errors and the `mcp-publisher --help` smoke-test, without uploading anything.
129
+
130
+ ## Reporting security issues
131
+
132
+ **Do not open a public issue for a security vulnerability.** See [SECURITY.md](SECURITY.md) for the coordinated disclosure process.
133
+
134
+ ## Licensing
135
+
136
+ By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE) used by this project. dotSolved Systems retains copyright on all contributions.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dotSolved Systems, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,409 @@
1
+ Metadata-Version: 2.4
2
+ Name: nexatron-mcp
3
+ Version: 1.0.0
4
+ Summary: Nexatron MCP server — governed enterprise-data access for Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and any MCP-compatible AI client. Exposes 12 tools (query, list_connections, get_schema, list_metrics, list_views, search_knowledge_base, detect_schema_drift, test_connection, list_conversations, get_report, get_credit_balance, whoami) and 1 resource (nexatron://platform/info) over the Nexatron REST API with per-tenant isolation and cryptographic audit.
5
+ Project-URL: Homepage, https://nexatron.io
6
+ Project-URL: Documentation, https://docs.nexatron.io
7
+ Project-URL: Repository, https://github.com/sravanmodugula-solved/nexatron
8
+ Project-URL: Issues, https://github.com/sravanmodugula-solved/nexatron/issues
9
+ Project-URL: Changelog, https://github.com/sravanmodugula-solved/nexatron/blob/main/packages/mcp-server/CHANGELOG.md
10
+ Project-URL: Parent Company, https://dotsolved.com
11
+ Author-email: "dotSolved Systems, Inc." <info@dotsolved.com>
12
+ Maintainer-email: Nexatron Engineering <nexatron@dotsolved.com>
13
+ License: MIT
14
+ License-File: LICENSE
15
+ Keywords: ai,analytics,bi,business-intelligence,claude,claude-code,claude-desktop,cursor,data,dotsolved,enterprise,mcp,model-context-protocol,natural-language,nexatron,nl-to-sql,semantic-layer,text-to-sql,voice
16
+ Classifier: Development Status :: 5 - Production/Stable
17
+ Classifier: Environment :: Console
18
+ Classifier: Environment :: Plugins
19
+ Classifier: Framework :: AsyncIO
20
+ Classifier: Intended Audience :: Developers
21
+ Classifier: Intended Audience :: Information Technology
22
+ Classifier: Intended Audience :: System Administrators
23
+ Classifier: License :: OSI Approved :: MIT License
24
+ Classifier: Natural Language :: English
25
+ Classifier: Operating System :: OS Independent
26
+ Classifier: Programming Language :: Python
27
+ Classifier: Programming Language :: Python :: 3
28
+ Classifier: Programming Language :: Python :: 3.10
29
+ Classifier: Programming Language :: Python :: 3.11
30
+ Classifier: Programming Language :: Python :: 3.12
31
+ Classifier: Programming Language :: Python :: 3.13
32
+ Classifier: Programming Language :: Python :: Implementation :: CPython
33
+ Classifier: Topic :: Database
34
+ Classifier: Topic :: Office/Business
35
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
36
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
37
+ Classifier: Topic :: Software Development :: Libraries
38
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
39
+ Classifier: Typing :: Typed
40
+ Requires-Python: >=3.10
41
+ Requires-Dist: httpx<1,>=0.27.0
42
+ Requires-Dist: mcp<2,>=1.0.0
43
+ Provides-Extra: dev
44
+ Requires-Dist: build>=1.2.0; extra == 'dev'
45
+ Requires-Dist: mypy>=1.11.0; extra == 'dev'
46
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
47
+ Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
48
+ Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
49
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
50
+ Requires-Dist: ruff>=0.6.0; extra == 'dev'
51
+ Requires-Dist: tomli>=2.0.0; (python_version < '3.11') and extra == 'dev'
52
+ Requires-Dist: twine>=5.1.0; extra == 'dev'
53
+ Description-Content-Type: text/markdown
54
+
55
+ # nexatron-mcp
56
+
57
+ <!-- mcp-name: io.github.sravanmodugula-solved/nexatron-mcp -->
58
+
59
+ MCP server for the [Nexatron](https://nexatron.io) AI Data Intelligence Platform. Ask questions about your enterprise data directly from Claude.
60
+
61
+ ## Two ways to connect
62
+
63
+ - **Hosted endpoint (recommended)** — `https://api.nexatron.io/api/v1/mcp` over OAuth 2.1. Nothing to install; exposes the full **governed v2 surface** (ten data-access tools incl. `ask`, `query_metric`, `compare_metric_across_sources`, plus the governance-contract tools and per-call lineage). MCP-aware clients (claude.ai, Claude Desktop, Cursor) discover it from the [registry](https://registry.modelcontextprotocol.io) entry. See [docs.nexatron.io/integrations/mcp-reference](https://docs.nexatron.io/integrations/mcp-reference).
64
+ - **Local stdio package (this package)** — `uvx nexatron-mcp`, authenticated with an `nxa_` API key. A **REST-backed subset** for self-hosted Nexatron instances and offline-style local use; exposes the tools listed under [Available tools](#available-tools-local-stdio-package) below. The two surfaces are versioned independently.
65
+
66
+ ## Install
67
+
68
+ ```bash
69
+ pip install nexatron-mcp
70
+ # or
71
+ uvx nexatron-mcp
72
+ ```
73
+
74
+ ## Setup
75
+
76
+ ### Claude Desktop
77
+
78
+ Add to `~/.claude/claude_desktop_config.json`:
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "nexatron": {
84
+ "command": "uvx",
85
+ "args": ["nexatron-mcp"],
86
+ "env": {
87
+ "NEXATRON_API_KEY": "nxa_your_api_key",
88
+ "NEXATRON_URL": "https://api.nexatron.io/api/v1"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ Restart Claude Desktop. You'll see Nexatron tools available.
96
+
97
+ ### Claude Code
98
+
99
+ ```bash
100
+ claude mcp add nexatron -- uvx nexatron-mcp \
101
+ --env NEXATRON_API_KEY=nxa_your_key \
102
+ --env NEXATRON_URL=https://api.nexatron.io/api/v1
103
+ ```
104
+
105
+ ### Cursor / VS Code
106
+
107
+ Add to `.cursor/mcp.json` or VS Code MCP settings:
108
+
109
+ ```json
110
+ {
111
+ "mcpServers": {
112
+ "nexatron": {
113
+ "command": "uvx",
114
+ "args": ["nexatron-mcp"],
115
+ "env": {
116
+ "NEXATRON_API_KEY": "nxa_your_key",
117
+ "NEXATRON_URL": "https://api.nexatron.io/api/v1"
118
+ }
119
+ }
120
+ }
121
+ }
122
+ ```
123
+
124
+ ## Environment Variables
125
+
126
+ | Variable | Required | Default | Description |
127
+ |----------|----------|---------|-------------|
128
+ | `NEXATRON_API_KEY` | Yes | — | Your Nexatron API key (starts with `nxa_`) |
129
+ | `NEXATRON_URL` | No | `http://localhost:8000/api/v1` | Nexatron API URL |
130
+
131
+ ## Available tools (local stdio package)
132
+
133
+ These are the tools the installable `nexatron-mcp` stdio package exposes against the Nexatron REST API. The hosted endpoint exposes the broader governed v2 surface described in [Two ways to connect](#two-ways-to-connect).
134
+
135
+ | Tool | Description |
136
+ |------|-------------|
137
+ | `query` | Ask questions about your data in plain English |
138
+ | `list_connections` | See all data source connections |
139
+ | `list_metrics` | View certified metrics in the semantic layer |
140
+ | `list_views` | View logical views |
141
+ | `get_schema` | Explore database schemas |
142
+ | `test_connection` | Test data source connectivity |
143
+ | `detect_schema_drift` | Find schema changes |
144
+ | `search_knowledge_base` | Search uploaded documents (RAG) |
145
+ | `list_conversations` | View recent query history |
146
+ | `get_report` | Retrieve a saved report |
147
+ | `get_credit_balance` | Check remaining query credits |
148
+ | `whoami` | Show your user info and organization |
149
+
150
+ ## Example
151
+
152
+ After setup, ask Claude:
153
+
154
+ > "Use Nexatron to show me total revenue by product category for Q4"
155
+
156
+ Claude will call the `query` tool, which sends your question through Nexatron's AI pipeline and returns the answer with SQL and results.
157
+
158
+ ## SSE Transport (Remote)
159
+
160
+ For remote or web-based MCP clients:
161
+
162
+ ```bash
163
+ NEXATRON_API_KEY=nxa_... nexatron-mcp --sse --port 8001
164
+ ```
165
+
166
+ ## Development
167
+
168
+ ```bash
169
+ git clone https://github.com/sravanmodugula-solved/nexatron
170
+ cd nexatron/packages/mcp-server
171
+ pip install -e .
172
+ nexatron-mcp
173
+ ```
174
+
175
+ ## License
176
+
177
+ MIT
178
+
179
+ ---
180
+
181
+ # Release & registry submission runbook
182
+
183
+ > Merged from the former `docs/integrations/mcp-server.md` (2026-06 necessity
184
+ > audit) — this README is the natural home for "how to release this package."
185
+ > Status tables below reflect pre-submission state; update as registries are
186
+ > submitted.
187
+
188
+ ## 1. PyPI — publish `nexatron-mcp`
189
+
190
+ The `nexatron-mcp` Python package is the primary artifact. It must be on PyPI before registry entries link to it, because installation commands reference `pip install nexatron-mcp` and `uvx nexatron-mcp`.
191
+
192
+ ### Pre-flight checklist
193
+
194
+ - [ ] All tests pass: `cd packages/mcp-server && uv run --with pytest --with pytest-asyncio --with pytest-httpx --with pytest-cov python -m pytest`
195
+ - [ ] Lint clean: `uv run --with ruff ruff check src/ tests/`
196
+ - [ ] Version in `pyproject.toml` and `src/nexatron_mcp/__init__.py` match (currently `1.0.0`).
197
+ - [ ] `CHANGELOG.md` has an entry for the version being published.
198
+ - [ ] Build artifacts are clean: `rm -rf dist/ && uv run --with build python -m build`
199
+
200
+ ### Publish steps
201
+
202
+ ```bash
203
+ cd packages/mcp-server
204
+
205
+ # Build wheel and sdist
206
+ uv run --with build python -m build
207
+
208
+ # Check the dist before upload
209
+ uv run --with twine twine check dist/*
210
+
211
+ # Upload to PyPI (requires PyPI account with push rights to nexatron-mcp)
212
+ uv run --with twine twine upload dist/*
213
+ # You will be prompted for a PyPI API token (not a username/password).
214
+ # Store the token in your password manager, not in any file committed to git.
215
+ ```
216
+
217
+ Alternatively, the GitHub Actions workflow `.github/workflows/mcp-publish.yml` (tag-triggered on `mcp-server-v*`) runs this via PyPI trusted publishing (OIDC) without a stored token — preferred for CI — and then publishes `server.json` to the MCP Registry.
218
+
219
+ After upload, verify at https://pypi.org/project/nexatron-mcp/.
220
+
221
+ ---
222
+
223
+ ## 2. Anthropic MCP Directory (open registry)
224
+
225
+ The Anthropic open MCP directory is maintained as a GitHub repository at https://github.com/modelcontextprotocol/servers. Listing is via pull request.
226
+
227
+ ### What to prepare
228
+
229
+ The directory uses a YAML entry per server. The proposed entry (ready to copy) is in `docs/integrations/anthropic-directory-submission.md` section 6. It looks like this:
230
+
231
+ ```yaml
232
+ - name: nexatron
233
+ description: Ask questions about your enterprise data in plain English. AI analytics engine from dotSolved.
234
+ category: data-analytics
235
+ homepage: https://nexatron.io
236
+ source: https://github.com/sravanmodugula-solved/nexatron/tree/main/packages/mcp-server
237
+ package: nexatron-mcp
238
+ install: uvx nexatron-mcp
239
+ license: MIT
240
+ maintainer: dotSolved Systems, Inc.
241
+ maintainer_email: nexatron@dotsolved.com
242
+ supports_remote: true
243
+ remote_manifest: https://api.nexatron.io/.well-known/mcp/server.json
244
+ tags:
245
+ - data
246
+ - analytics
247
+ - bi
248
+ - nl-to-sql
249
+ - semantic-layer
250
+ - enterprise
251
+ - soc2
252
+ ```
253
+
254
+ ### Submission steps
255
+
256
+ 1. Fork https://github.com/modelcontextprotocol/servers.
257
+ 2. Add the YAML entry above to the appropriate category file (check the repo structure; it likely has a `servers/data-analytics/` directory or a top-level `servers.yaml`).
258
+ 3. Open a pull request with the title: `Add Nexatron MCP server (nexatron-mcp)`.
259
+ 4. Use the PR description template from `docs/integrations/anthropic-directory-submission.md` Appendix B.
260
+ 5. Assign the PR to a dotSolved engineer to monitor and respond to reviewer comments.
261
+
262
+ ### Notes
263
+
264
+ - The `nexatron-mcp` package must be on PyPI before submitting, because reviewers will run `uvx nexatron-mcp` to verify.
265
+ - The `.well-known/mcp/server.json` endpoint must be live and return a valid manifest. The static file is at `docs/integrations/nexatron-mcp-manifest.json`; the backend serves it from `app/api/wellknown.py` (verify that endpoint is deployed).
266
+ - Estimated Anthropic review time: 1-7 business days based on past community submissions.
267
+
268
+ ---
269
+
270
+ ## 3. Cursor MCP Registry
271
+
272
+ Cursor maintains a list of community MCP servers at https://docs.cursor.com/context/model-context-protocol. Listing is via a GitHub PR or a submission form (check the current Cursor docs for the live submission process, as it changes).
273
+
274
+ ### What to prepare
275
+
276
+ Cursor's listing requires:
277
+ - Server name, description, install command, and homepage URL.
278
+ - Confirmation that the server follows MCP 2024-11 spec.
279
+ - A working demo (optionally, a short screen recording).
280
+
281
+ ### Submission steps
282
+
283
+ 1. Check https://docs.cursor.com/context/model-context-protocol for the current submission mechanism (PR vs form).
284
+ 2. If PR-based, fork the relevant Cursor docs/registry repo and add an entry:
285
+ ```json
286
+ {
287
+ "name": "Nexatron",
288
+ "description": "AI analytics engine from dotSolved — ask questions about enterprise data in plain English. 12 tools including NL-to-SQL, semantic layer metrics, and RAG search.",
289
+ "install": "uvx nexatron-mcp",
290
+ "homepage": "https://nexatron.io",
291
+ "category": "data"
292
+ }
293
+ ```
294
+ 3. Include a link to `docs/integrations/claude-install.md#cursor` for the full Cursor install guide.
295
+ 4. Contact Cursor through their developer relations channel if a partnership tier listing is desired.
296
+
297
+ ### Cursor-specific config location
298
+
299
+ For user reference, the Cursor config file is `.cursor/mcp.json` at the project root or `~/.cursor/mcp.json` for global scope. The `npx @nexatron/create-mcp --client cursor` command writes this file automatically.
300
+
301
+ ---
302
+
303
+ ## 4. Claude Desktop (Anthropic Connector Partner Program)
304
+
305
+ Getting listed in the curated claude.ai connectors list (the built-in integration picker users see when they open Settings > Integrations) requires partnership approval from Anthropic's platform team. This is separate from the open directory submission in section 2.
306
+
307
+ ### What Anthropic requires
308
+
309
+ From the Connector Partner Program application (based on public documentation as of April 2026):
310
+ - Working remote MCP server accessible via HTTPS.
311
+ - OAuth 2.1 with PKCE (the Nexatron backend already implements this).
312
+ - RFC 8414 server metadata at `/.well-known/oauth-authorization-server`.
313
+ - RFC 9728 protected resource metadata at `/.well-known/oauth-protected-resource`.
314
+ - The server manifest at `/.well-known/mcp/server.json` (live at `https://api.nexatron.io/.well-known/mcp/server.json`).
315
+ - Demonstrated security posture (SOC 2, pen test results, etc.).
316
+ - A point of contact at the partner company.
317
+
318
+ All of the above are either already built or documented in `docs/integrations/anthropic-directory-submission.md`.
319
+
320
+ ### Submission steps
321
+
322
+ 1. Email `partners@anthropic.com` with the subject: `Nexatron MCP Connector Partner Application`.
323
+ 2. Attach or link to `docs/integrations/anthropic-directory-submission.md` as the dossier.
324
+ 3. Confirm the remote MCP endpoint is live and the OAuth flow completes end-to-end (test with a claude.ai Pro account before submitting).
325
+ 4. Ashok Rao (founder, dotSolved) is the business contact; route partnership discussions through him.
326
+ 5. Nexatron Engineering (`nexatron@dotsolved.com`) handles technical questions.
327
+
328
+ ### Pre-flight for remote MCP
329
+
330
+ Before submitting, verify:
331
+
332
+ ```bash
333
+ # Manifest is live
334
+ curl https://api.nexatron.io/.well-known/mcp/server.json | python3 -m json.tool
335
+
336
+ # OAuth server metadata
337
+ curl https://api.nexatron.io/.well-known/oauth-authorization-server | python3 -m json.tool
338
+
339
+ # Protected resource metadata
340
+ curl https://api.nexatron.io/.well-known/oauth-protected-resource | python3 -m json.tool
341
+ ```
342
+
343
+ All three must return valid JSON with no 404/500. The MCP server endpoint itself:
344
+
345
+ ```bash
346
+ # Should return 200 or 405 (not 404)
347
+ curl -I https://api.nexatron.io/api/v1/mcp
348
+ ```
349
+
350
+ ---
351
+
352
+ ## 5. npm — publish `@nexatron/create-mcp`
353
+
354
+ The scaffolding CLI in `packages/create-nexatron-mcp/` should be published to npm so users can run `npx @nexatron/create-mcp`.
355
+
356
+ ### Pre-flight checklist
357
+
358
+ - [ ] Node tests pass: `cd packages/create-nexatron-mcp && node --test src/index.test.js`
359
+ - [ ] Version in `package.json` is correct.
360
+ - [ ] `bin.create-nexatron-mcp` points to `./src/index.js`.
361
+ - [ ] `src/index.js` has `#!/usr/bin/env node` as the first line.
362
+
363
+ ### Publish steps
364
+
365
+ ```bash
366
+ cd packages/create-nexatron-mcp
367
+
368
+ # Dry run — shows what will be published
369
+ npm pack --dry-run
370
+
371
+ # Log in to npm (requires npm account with publish rights to @nexatron org)
372
+ npm login
373
+
374
+ # Publish under the @nexatron scope
375
+ npm publish --access public
376
+ ```
377
+
378
+ After publish, verify:
379
+
380
+ ```bash
381
+ npx @nexatron/create-mcp --help
382
+ ```
383
+
384
+ ---
385
+
386
+ ## 6. Post-submission tracking
387
+
388
+ | Registry | Status | Notes |
389
+ |----------|--------|-------|
390
+ | PyPI (`nexatron-mcp`) | Not published | Run publish steps above |
391
+ | Anthropic open MCP directory | Not submitted | PR to modelcontextprotocol/servers |
392
+ | Cursor MCP registry | Not submitted | Check current submission mechanism |
393
+ | Anthropic Connector Partner | Not submitted | Email partners@anthropic.com |
394
+ | npm (`@nexatron/create-mcp`) | Not published | Run npm publish steps above |
395
+
396
+ Update this table as each submission progresses.
397
+
398
+ ---
399
+
400
+ ## 7. Keeping the manifest current
401
+
402
+ The static manifest at `docs/integrations/nexatron-mcp-manifest.json` is the source of truth for the live endpoint at `https://api.nexatron.io/.well-known/mcp/server.json`. When tool names, scopes, or capabilities change:
403
+
404
+ 1. Update `docs/integrations/nexatron-mcp-manifest.json`.
405
+ 2. Update the backend route that serves it (check `app/api/wellknown.py`).
406
+ 3. Update the tool list in `packages/mcp-server/src/nexatron_mcp/server.py`.
407
+ 4. Bump the version in `packages/mcp-server/pyproject.toml` and `__init__.py`.
408
+ 5. Add a CHANGELOG entry.
409
+ 6. Notify any registered partner registries of the change (most accept simple re-submissions).