Skip to content

mrdulasolutions/RevOps-RevAMfg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REVA-OPS

The AI operations stack for Rev A Manufacturing.

One monorepo. One Railway deploy. One MCP endpoint. Three systems working together:

  • REVA-TURBO plugin — 48 skills that run inside Claude Code / Claude Desktop for every PM workflow at Rev A (RFQ → quote → China sourcing → compliance → quality → shipping).
  • Nakatomi CRM (internal) — headless AI-native CRM, Postgres-backed, customized for Rev A's pipeline and custom fields.
  • AutoMem (internal) — hybrid graph + vector memory (FalkorDB + Qdrant) for durable team-wide knowledge.

A thin MCP router is the only publicly exposed service. It speaks the Model Context Protocol to agents and proxies internally to the CRM and memory backends. One URL, one bearer token, one connector config — that's what the plugin and Claude Desktop / Cursor need to know.

flowchart LR
  Plugin["REVA-TURBO plugin<br/>(~/.claude/plugins/reva-turbo)"]
  Claude["Claude Desktop / Cursor"]
  subgraph Railway["Single Railway project"]
    Router["mcp-router<br/>(public /mcp)"]
    Nakatomi["nakatomi-backend<br/>(private)"]
    AutoMem["automem-backend<br/>(private)"]
    PG[("Postgres")]
    Falkor[("FalkorDB")]
    Qdrant[("Qdrant")]
    Router -- "crm_*" --> Nakatomi
    Router -- "mem_*" --> AutoMem
    Nakatomi --> PG
    AutoMem --> Falkor
    AutoMem --> Qdrant
  end
  Plugin --> Router
  Claude --> Router
Loading

Repository layout

RevOps-RevAMfg/
├── plugin/                      ← REVA-TURBO Claude plugin (48 skills)
│   ├── skills/                  ← one directory per skill (SKILL.md + assets)
│   ├── bin/                     ← telemetry, session-track, config helpers
│   ├── setup                    ← post-install bootstrap
│   ├── install.sh               ← curl-able CLI installer (legacy path)
│   ├── build-bundle.sh          ← builds dist/reva-turbo-<ver>.zip
│   ├── .claude-plugin/
│   │   └── plugin.json          ← manifest + userConfig prompts + mcpServers
│   └── dist/                    ← built zips (gitignored; shipped via Releases)
├── services/
│   ├── mcp-router/              ← unified MCP endpoint (FastAPI + FastMCP)
│   ├── nakatomi-backend/
│   │   └── seed/reva.py         ← Rev A pipeline + custom-field overlay
│   └── automem-backend/         ← AutoMem is vendored-by-reference via Railway
├── railway/
│   ├── deploy.sh                ← phased deploy (init/services/seed/finalize)
│   ├── template.yaml            ← reference stack spec (not executable)
│   └── README.md                ← deploy reference
└── docs/
    ├── ARCHITECTURE.md, ARCHITECTURE_V2.md, AUTH.md, INSTALL.md, ROADMAP.md

For end users (Rev A PMs)

You need: a work email (@revamfg.com or @mrdula.solutions), the one-time signup token from your admin, and Claude Desktop installed. No terminal, no settings hunting.

1. Mint your API key. Click this link:

https://mcp-router-production-460a.up.railway.app/signup

Fill in your name, your @revamfg.com or @mrdula.solutions email, a password (12+ chars — only used if you ever need the admin to reset your key), and paste the signup token. The page shows a key that starts with nk_. Copy it now — it's only shown once.

2. Download the plugin. Grab the latest reva-turbo-<version>.zip from GitHub Releases → latest. Don't unzip it.

3. Install it in Claude Desktop. Open Plugins → Personal → Local uploads → + and drop in the zip. Click Enable. No settings to fill in — the plugin self-configures in the next step.

⚠️ Already have RevAOps installed from before? Claude Desktop's plugin uploader does not auto-upgrade an existing install. If you're on v2.0.x or earlier, go to Plugins → Installed → RevAOps → ⋯ → Remove, then quit Desktop (Cmd-Q), relaunch, and then upload the new zip. Skipping this leaves you on the old launcher and the engine can't pick up your key.

4. Connect your key in chat. In any Claude Desktop conversation, type:

/reva-turbo:revmyengine

The engine greets you and notices it doesn't have a key yet. Reply with:

/connect nk_yourkeyhere

The engine validates the key against the router, saves it locally (mode-600 file at ~/.reva-turbo/state/mcp-credentials.env), and tells you to quit and reopen Claude Desktop (Cmd-Q, then relaunch).

5. Pick your role. On the next launch, run /reva-turbo:revmyengine again. It asks one question — what's your role? (PM / Sales / Compliance / C-level / Eng) — and you're in.

Everything you log is shared with the Rev A team, and every action is attributed to your user on the Nakatomi timeline.

Only @revamfg.com and @mrdula.solutions emails can sign up. The signup token alone isn't enough — the router enforces the email allowlist. If you need access under a different domain, contact the admin (matt@mrdula.solutions) to add yours to REVA_ALLOWED_EMAIL_DOMAINS on the router.

Prefer the terminal? The legacy CLI path still works for Claude Code users:

curl -fsSL https://raw.githubusercontent.com/mrdulasolutions/RevOps-RevAMfg/main/plugin/install.sh \
  | REVA_MCP_URL=https://mcp-router-production-460a.up.railway.app/mcp bash

It drops into the same signup wizard and writes ~/.reva-turbo/state/mcp-credentials.env directly.

Have your own CRM connector in Claude?

REVA-TURBO ships with Nakatomi (CRM) and AutoMem (semantic memory) as the defaults — those come over the router automatically. But if you've already connected HubSpot, Salesforce, Attio, or any other CRM to Claude Desktop, you can keep using it as your source of truth:

/integrate hubspot

After you do this, skills that write customer/deal/contact data will:

  1. Write to HubSpot first (your primary CRM — this is the record of truth).
  2. Shadow-write the same data to Nakatomi so the whole Rev A team sees the activity on the shared timeline.
  3. Store the semantic memory in AutoMem linked to both IDs.

Reads prefer HubSpot when it's available and fall back to Nakatomi on an outage. Run /integrate nakatomi (the default) to revert.

See docs/CONNECTORS.md for the full list of supported connectors and the shadow-write contract.

See docs/AUTH.md for the full auth flow and rotation story.

For admins (MrDula Solutions)

Deploy the backend for a new customer:

git clone https://github.com/mrdulasolutions/RevOps-RevAMfg.git
cd RevOps-RevAMfg
./railway/deploy.sh --project-name reva-ops --admin-email you@reva.com
# → prints public MCP URL + admin API key + signup token

One Railway project. Three application services (mcp-router, nakatomi-backend, automem-backend). Three managed databases (Postgres, FalkorDB, Qdrant). Wired up automatically via Railway's private network — only mcp-router has a public domain.

The deploy is phased (init / services / seed / finalize), so any individual phase can be re-run if something fails mid-flight. See railway/README.md for the full story, including the one-time Railway GitHub App install flow.

Why one MCP endpoint

Two reasons we run a router instead of exposing Nakatomi's /mcp and AutoMem's /mcp separately:

  1. One connector config, not two. Every MCP client (Claude Desktop, Cursor, the plugin) has to be pointed at every endpoint by hand. Doubling the connector count doubles the onboarding friction for a PM team.
  2. Cross-system tools. "Remember this ITAR ruling and tag it to Acme's contact" is a memory write and a CRM link. A router owns that orchestration (reva_remember_about_entity); two isolated MCPs cannot.

Tool namespaces keep the surface tidy:

Prefix Backend Examples
crm_ Nakatomi crm_search_contacts, crm_create_deal, crm_move_deal_stage
mem_ AutoMem mem_store, mem_recall, mem_associate
reva_ router reva_remember_about_entity, reva_recall_for_entity

Rev A customizations

Delivered as overlays, not forks. Applied automatically by railway/deploy.sh phase 3 (seed):

  • Pipeline — Manufacturing RFQ (12 stages): RFQ Received → Qualified → Quoted → Accepted → In Manufacturing → Inspection (G2) → Repackage → Shipped → Delivered → Invoiced → Paid (won) → Closed Lost.
  • Custom fields (8 total): company.partner_scorecard, company.compliance, company.region, contact.role, deal.quality_gates, deal.ncrs, deal.part_numbers, deal.china_source. JSON-shaped payloads ride as text because Nakatomi's custom-field schema is scalar-only.
  • Memory taxonomyreva/rfq, reva/quality, reva/compliance, reva/china-source, reva/partner-scorecard, reva/ncr, reva/shipping, reva/itar.

All defined in services/nakatomi-backend/seed/reva.py.

Documentation


Built by MrDula Solutions for Rev A Manufacturing. Powered by Claude, Nakatomi, and AutoMem.