@crossgen-ai/praxis-connectors

Praxis connectors engine — a box-resident MCP layer shared by the praxis harness, the Praxis app's serve, and scheduled runs. One store per box; sign-in relayed by whichever face the human is looking at.

Packages

Package details

extension

Install @crossgen-ai/praxis-connectors from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@crossgen-ai/praxis-connectors
Package
@crossgen-ai/praxis-connectors
Version
0.1.0
Published
Aug 14, 2026
Downloads
106/mo · 49/wk
Author
mtjanney2
License
MIT
Types
extension
Size
49.8 KB
Dependencies
1 dependency · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./extension/index.js"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

@crossgen-ai/praxis-connectors

The Praxis connectors engine: a box-resident MCP layer shared by the praxis harness, the Praxis desktop app's serve, and scheduled runs. Decided in Praxis-UI AD-0015/SPEC-0004 and harness ADR-0151 — this package is the neutral ground both sides depend on so no code ever crosses the app↔harness seam.

The shape

  • One store per box$PRAXIS_CONNECTORS_HOME (default ~/.praxis-connectors): connectors.json (registry, never secrets), auth/<id>.json (tokens, 0600), cache/<id>.json (tool lists). Sharing is the file: whoever writes, everyone sees.
  • Engine face (require('@crossgen-ai/praxis-connectors')) — the library praxis serve links: add/remove/list, probe, callTool, the OAuth relay (authStart → URL out, authFinish ← code in), and proactive token refresh.
  • Extension face (…/extension) — a pi extension registering every cached connector tool as mcp__<connector>__<tool>. Loaded by interactive harness sessions (via a shim that keeps the worker gate) and by scheduled runs (pi -e <path>), scoped per run with PRAXIS_CONNECTORS_ONLY=id1,id2.
  • MCP client: the official @modelcontextprotocol/client v2 — stdio + streamable HTTP, automatic protocol-version negotiation, spec OAuth.

Sign-in (the relay)

The box starts the flow (PKCE verifier never leaves it), the app shows the authorization URL, the human finishes in their own browser, and the code returns either through serve's callback route or a paste-back field — authFinish is the same door for both. Tokens are born, stored (0600), and refreshed on the box; the serve process owns proactive refresh so connectors stay warm with the owner's Mac off.

Tests

npm test — fully hermetic: a fake stdio MCP server, a fake streamable HTTP MCP server, and a fake OAuth authorization server (PKCE + refresh + rotation). The fakes are exported as @crossgen-ai/praxis-connectors/test-helpers so consumers' suites (Praxis-UI serve + e2e) drive the identical seam.

Catalog

Ships a starter catalog spanning both OAuth families: Gmail, Google Calendar, Google Drive (Google's official Workspace remote MCP endpoints — bring your own OAuth client; Google issues no dynamic registration), and Outlook Mail, Microsoft Calendar, OneDrive (the ms-365 stdio server on the box, which manages its own Microsoft login).