Metadata-Version: 2.4
Name: nexatron-mcp
Version: 1.0.0
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.
Project-URL: Homepage, https://nexatron.io
Project-URL: Documentation, https://docs.nexatron.io
Project-URL: Repository, https://github.com/sravanmodugula-solved/nexatron
Project-URL: Issues, https://github.com/sravanmodugula-solved/nexatron/issues
Project-URL: Changelog, https://github.com/sravanmodugula-solved/nexatron/blob/main/packages/mcp-server/CHANGELOG.md
Project-URL: Parent Company, https://dotsolved.com
Author-email: "dotSolved Systems, Inc." <info@dotsolved.com>
Maintainer-email: Nexatron Engineering <nexatron@dotsolved.com>
License: MIT
License-File: LICENSE
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
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Environment :: Plugins
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Database
Classifier: Topic :: Office/Business
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: httpx<1,>=0.27.0
Requires-Dist: mcp<2,>=1.0.0
Provides-Extra: dev
Requires-Dist: build>=1.2.0; extra == 'dev'
Requires-Dist: mypy>=1.11.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.6.0; extra == 'dev'
Requires-Dist: tomli>=2.0.0; (python_version < '3.11') and extra == 'dev'
Requires-Dist: twine>=5.1.0; extra == 'dev'
Description-Content-Type: text/markdown

# nexatron-mcp

<!-- mcp-name: io.github.sravanmodugula-solved/nexatron-mcp -->

MCP server for the [Nexatron](https://nexatron.io) AI Data Intelligence Platform. Ask questions about your enterprise data directly from Claude.

## Two ways to connect

- **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).
- **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.

## Install

```bash
pip install nexatron-mcp
# or
uvx nexatron-mcp
```

## Setup

### Claude Desktop

Add to `~/.claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "nexatron": {
      "command": "uvx",
      "args": ["nexatron-mcp"],
      "env": {
        "NEXATRON_API_KEY": "nxa_your_api_key",
        "NEXATRON_URL": "https://api.nexatron.io/api/v1"
      }
    }
  }
}
```

Restart Claude Desktop. You'll see Nexatron tools available.

### Claude Code

```bash
claude mcp add nexatron -- uvx nexatron-mcp \
  --env NEXATRON_API_KEY=nxa_your_key \
  --env NEXATRON_URL=https://api.nexatron.io/api/v1
```

### Cursor / VS Code

Add to `.cursor/mcp.json` or VS Code MCP settings:

```json
{
  "mcpServers": {
    "nexatron": {
      "command": "uvx",
      "args": ["nexatron-mcp"],
      "env": {
        "NEXATRON_API_KEY": "nxa_your_key",
        "NEXATRON_URL": "https://api.nexatron.io/api/v1"
      }
    }
  }
}
```

## Environment Variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `NEXATRON_API_KEY` | Yes | — | Your Nexatron API key (starts with `nxa_`) |
| `NEXATRON_URL` | No | `http://localhost:8000/api/v1` | Nexatron API URL |

## Available tools (local stdio package)

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).

| Tool | Description |
|------|-------------|
| `query` | Ask questions about your data in plain English |
| `list_connections` | See all data source connections |
| `list_metrics` | View certified metrics in the semantic layer |
| `list_views` | View logical views |
| `get_schema` | Explore database schemas |
| `test_connection` | Test data source connectivity |
| `detect_schema_drift` | Find schema changes |
| `search_knowledge_base` | Search uploaded documents (RAG) |
| `list_conversations` | View recent query history |
| `get_report` | Retrieve a saved report |
| `get_credit_balance` | Check remaining query credits |
| `whoami` | Show your user info and organization |

## Example

After setup, ask Claude:

> "Use Nexatron to show me total revenue by product category for Q4"

Claude will call the `query` tool, which sends your question through Nexatron's AI pipeline and returns the answer with SQL and results.

## SSE Transport (Remote)

For remote or web-based MCP clients:

```bash
NEXATRON_API_KEY=nxa_... nexatron-mcp --sse --port 8001
```

## Development

```bash
git clone https://github.com/sravanmodugula-solved/nexatron
cd nexatron/packages/mcp-server
pip install -e .
nexatron-mcp
```

## License

MIT

---

# Release & registry submission runbook

> Merged from the former `docs/integrations/mcp-server.md` (2026-06 necessity
> audit) — this README is the natural home for "how to release this package."
> Status tables below reflect pre-submission state; update as registries are
> submitted.

## 1. PyPI — publish `nexatron-mcp`

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`.

### Pre-flight checklist

- [ ] All tests pass: `cd packages/mcp-server && uv run --with pytest --with pytest-asyncio --with pytest-httpx --with pytest-cov python -m pytest`
- [ ] Lint clean: `uv run --with ruff ruff check src/ tests/`
- [ ] Version in `pyproject.toml` and `src/nexatron_mcp/__init__.py` match (currently `1.0.0`).
- [ ] `CHANGELOG.md` has an entry for the version being published.
- [ ] Build artifacts are clean: `rm -rf dist/ && uv run --with build python -m build`

### Publish steps

```bash
cd packages/mcp-server

# Build wheel and sdist
uv run --with build python -m build

# Check the dist before upload
uv run --with twine twine check dist/*

# Upload to PyPI (requires PyPI account with push rights to nexatron-mcp)
uv run --with twine twine upload dist/*
# You will be prompted for a PyPI API token (not a username/password).
# Store the token in your password manager, not in any file committed to git.
```

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.

After upload, verify at https://pypi.org/project/nexatron-mcp/.

---

## 2. Anthropic MCP Directory (open registry)

The Anthropic open MCP directory is maintained as a GitHub repository at https://github.com/modelcontextprotocol/servers. Listing is via pull request.

### What to prepare

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:

```yaml
- name: nexatron
  description: Ask questions about your enterprise data in plain English. AI analytics engine from dotSolved.
  category: data-analytics
  homepage: https://nexatron.io
  source: https://github.com/sravanmodugula-solved/nexatron/tree/main/packages/mcp-server
  package: nexatron-mcp
  install: uvx nexatron-mcp
  license: MIT
  maintainer: dotSolved Systems, Inc.
  maintainer_email: nexatron@dotsolved.com
  supports_remote: true
  remote_manifest: https://api.nexatron.io/.well-known/mcp/server.json
  tags:
    - data
    - analytics
    - bi
    - nl-to-sql
    - semantic-layer
    - enterprise
    - soc2
```

### Submission steps

1. Fork https://github.com/modelcontextprotocol/servers.
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`).
3. Open a pull request with the title: `Add Nexatron MCP server (nexatron-mcp)`.
4. Use the PR description template from `docs/integrations/anthropic-directory-submission.md` Appendix B.
5. Assign the PR to a dotSolved engineer to monitor and respond to reviewer comments.

### Notes

- The `nexatron-mcp` package must be on PyPI before submitting, because reviewers will run `uvx nexatron-mcp` to verify.
- 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).
- Estimated Anthropic review time: 1-7 business days based on past community submissions.

---

## 3. Cursor MCP Registry

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).

### What to prepare

Cursor's listing requires:
- Server name, description, install command, and homepage URL.
- Confirmation that the server follows MCP 2024-11 spec.
- A working demo (optionally, a short screen recording).

### Submission steps

1. Check https://docs.cursor.com/context/model-context-protocol for the current submission mechanism (PR vs form).
2. If PR-based, fork the relevant Cursor docs/registry repo and add an entry:
   ```json
   {
     "name": "Nexatron",
     "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.",
     "install": "uvx nexatron-mcp",
     "homepage": "https://nexatron.io",
     "category": "data"
   }
   ```
3. Include a link to `docs/integrations/claude-install.md#cursor` for the full Cursor install guide.
4. Contact Cursor through their developer relations channel if a partnership tier listing is desired.

### Cursor-specific config location

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.

---

## 4. Claude Desktop (Anthropic Connector Partner Program)

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.

### What Anthropic requires

From the Connector Partner Program application (based on public documentation as of April 2026):
- Working remote MCP server accessible via HTTPS.
- OAuth 2.1 with PKCE (the Nexatron backend already implements this).
- RFC 8414 server metadata at `/.well-known/oauth-authorization-server`.
- RFC 9728 protected resource metadata at `/.well-known/oauth-protected-resource`.
- The server manifest at `/.well-known/mcp/server.json` (live at `https://api.nexatron.io/.well-known/mcp/server.json`).
- Demonstrated security posture (SOC 2, pen test results, etc.).
- A point of contact at the partner company.

All of the above are either already built or documented in `docs/integrations/anthropic-directory-submission.md`.

### Submission steps

1. Email `partners@anthropic.com` with the subject: `Nexatron MCP Connector Partner Application`.
2. Attach or link to `docs/integrations/anthropic-directory-submission.md` as the dossier.
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).
4. Ashok Rao (founder, dotSolved) is the business contact; route partnership discussions through him.
5. Nexatron Engineering (`nexatron@dotsolved.com`) handles technical questions.

### Pre-flight for remote MCP

Before submitting, verify:

```bash
# Manifest is live
curl https://api.nexatron.io/.well-known/mcp/server.json | python3 -m json.tool

# OAuth server metadata
curl https://api.nexatron.io/.well-known/oauth-authorization-server | python3 -m json.tool

# Protected resource metadata
curl https://api.nexatron.io/.well-known/oauth-protected-resource | python3 -m json.tool
```

All three must return valid JSON with no 404/500. The MCP server endpoint itself:

```bash
# Should return 200 or 405 (not 404)
curl -I https://api.nexatron.io/api/v1/mcp
```

---

## 5. npm — publish `@nexatron/create-mcp`

The scaffolding CLI in `packages/create-nexatron-mcp/` should be published to npm so users can run `npx @nexatron/create-mcp`.

### Pre-flight checklist

- [ ] Node tests pass: `cd packages/create-nexatron-mcp && node --test src/index.test.js`
- [ ] Version in `package.json` is correct.
- [ ] `bin.create-nexatron-mcp` points to `./src/index.js`.
- [ ] `src/index.js` has `#!/usr/bin/env node` as the first line.

### Publish steps

```bash
cd packages/create-nexatron-mcp

# Dry run — shows what will be published
npm pack --dry-run

# Log in to npm (requires npm account with publish rights to @nexatron org)
npm login

# Publish under the @nexatron scope
npm publish --access public
```

After publish, verify:

```bash
npx @nexatron/create-mcp --help
```

---

## 6. Post-submission tracking

| Registry | Status | Notes |
|----------|--------|-------|
| PyPI (`nexatron-mcp`) | Not published | Run publish steps above |
| Anthropic open MCP directory | Not submitted | PR to modelcontextprotocol/servers |
| Cursor MCP registry | Not submitted | Check current submission mechanism |
| Anthropic Connector Partner | Not submitted | Email partners@anthropic.com |
| npm (`@nexatron/create-mcp`) | Not published | Run npm publish steps above |

Update this table as each submission progresses.

---

## 7. Keeping the manifest current

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:

1. Update `docs/integrations/nexatron-mcp-manifest.json`.
2. Update the backend route that serves it (check `app/api/wellknown.py`).
3. Update the tool list in `packages/mcp-server/src/nexatron_mcp/server.py`.
4. Bump the version in `packages/mcp-server/pyproject.toml` and `__init__.py`.
5. Add a CHANGELOG entry.
6. Notify any registered partner registries of the change (most accept simple re-submissions).
