Skip to main content
Glama
nous-portal-mcp

nous-portal-mcp

by callisto-syn

Nous Portal MCP

Portable, read-only first adapter for selected Nous Portal capabilities.

Status: early review scaffold. It is not yet authenticated and cannot invoke paid tools.

The first slice exposes:

  • nous_portal_status — local configuration status without credential output;

  • nous_portal_routes — local derivation of the vendor-specific managed gateway origins with an explicit no-effect receipt.

  • nous_portal_auth_start — request a device code without opening a browser;

  • nous_portal_auth_poll — poll once and atomically persist approved OAuth state without returning token values.

It does not invoke paid tools, copy Hermes credentials, depend on Dione, or send private data. Merely installing the adapter does not start authentication.

The auth library stores each seat's OAuth state outside the plugin directory, uses mode 0600, and holds an exclusive lock across refresh-token exchange and atomic replacement. Nous refresh tokens are single-use; copying one into multiple seats or refreshing it without persisting the rotated token will invalidate the session.

Configuration

Each adopting seat supplies its own credentials:

NOUS_PORTAL_STATE_DIR=<required private local per-seat state directory>
NOUS_PORTAL_CLIENT_ID=<required Portal OAuth client ID>
NOUS_PORTAL_SPEND_LIMIT_USD=<future paid-call ceiling>
TOOL_GATEWAY_DOMAIN=nousresearch.com
TOOL_GATEWAY_SCHEME=https
FIRECRAWL_GATEWAY_URL=<optional vendor-specific override>

NOUS_PORTAL_STATE_DIR has no shared fallback. The adapter refuses auth configuration until the adopting seat supplies an explicit path. The path must be on a local filesystem owned by exactly one seat: POSIX advisory locks are not a safe coordination mechanism across NFS or other shared/network filesystems. Do not distribute access or refresh tokens through a shared .env.

Device login is deliberately two-step. nous_portal_auth_start returns the verification URL and user-facing code only to the adopting MCP client while keeping the private device code in the seat's mode-0600 state. It never opens a browser or sends the code to Discord. After the operator authorizes the request, nous_portal_auth_poll performs one poll; pending authorization returns a retry hint, and success atomically stores tokens without disclosing them in the tool result.

Hermes derives managed origins as <vendor>-gateway.<TOOL_GATEWAY_DOMAIN>, with an optional vendor-specific override. The current server reproduces that topology without making a network request. Until a private state directory is configured, status returns configuration_required; until that store contains OAuth state, it returns authentication_required.

Related MCP server: test-dcr-mcp-server

Installation surfaces

The same dependency-free Python stdio server supports all clients. Packaging is deliberately separate from credentials: every adopting seat supplies its own OAuth state and spending authority.

Python / generic MCP

Install from a pinned Git commit:

python3 -m pip install \
  "nous-portal-mcp @ git+https://github.com/callisto-syn/nous-portal-mcp@<commit>"

The installed stdio command is:

nous-portal-mcp

See examples/generic-stdio.json.

Claude Code

Install the Python artifact in the construct's image or environment, then add the server entry from examples/claude-code.mcp.json. Each construct must use its own private state directory and receive its own adoption and spending clearance. Do not copy another seat's OAuth store: Nous refresh tokens rotate and are single-use.

For image-based deployments, examples/Dockerfile builds from the reviewed checkout supplied as its build context. Pin the checkout before building.

Codex

The repository is also a Codex plugin. Its .codex-plugin/plugin.json points to the repository-local .mcp.json, which launches the same server source.

Portability acceptance

Portability is not considered proven until a clean environment can:

  1. install a pinned artifact;

  2. start nous-portal-mcp over stdio;

  3. complete an MCP initialize and tools/list handshake;

  4. keep credentials and state outside the installed artifact;

  5. uninstall without removing or exposing another seat's state.

Development

python3 -m unittest discover -s tests

The design and prior-art record lives in docs/step0.md.

Available Tools

4 tools
nous_portal_auth_pollA

Poll a previously started device-code login exactly once. Makes one unmetered external request and atomically stores authorized tokens without returning token values.

Inputs: no named parameters.

nous_portal_auth_startA

Start a Nous Portal device-code login. Makes one unmetered external request, stores the private device code locally, and never opens a browser or sends the code to another channel.

Inputs: no named parameters.

nous_portal_routesA

List locally derived Nous Portal vendor gateway routes. Makes no external request and invokes no paid tool.

Inputs: no named parameters.

nous_portal_statusB

Report whether the portable Nous Portal adapter is configured. Never reveals credentials.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool has a clear, distinct purpose: checking configuration, listing routes, starting device-code login, and polling for authentication. No ambiguity or overlap exists.

    Naming Consistency5/5

    All tool names follow a consistent snake_case pattern with 'nous_portal_' prefix, making them predictable and easy to understand.

    Tool Count5/5

    With 4 tools covering status, routes, and the auth flow (start + poll), the count is well-scoped for the server's purpose without being too thin or excessive.

    Completeness4/5

    The tool surface covers essential operations for the adapter (status, routes, authentication start and poll). Minor gaps like logout or token refresh are missing, but the core workflow is complete.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Minimal MCP server for testing SkyStage's self-auth auto-detection feature. It includes tools like ping, echo, server_info, and read_secret, and uses a mock OAuth provider for login.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      A spec-compliant remote MCP server with built-in OAuth 2.1 and Dynamic Client Registration, enabling Notion Custom Agents to connect via 'Sign in with OAuth' without bearer tokens. It supports SSO federation to Google and Microsoft Entra, and includes basic tools like whoami, echo, and slow_task.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      A portable, stdio-based MCP server that exposes curated read operations across Microsoft Graph, Power BI, and Dataverse, plus an optional create-only Gemba action tool, using explicit Entra identities and read-only defaults. It lets teams run enterprise engineering workflow steps—discovery, draft preparation, and reviewed progress tracking—with separately approved, permission-scoped connectors and no automatic tenant access.
      MIT