nous-portal-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nous-portal-mcp check my nous portal status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-mcpSee 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:
install a pinned artifact;
start
nous-portal-mcpover stdio;complete an MCP initialize and tools/list handshake;
keep credentials and state outside the installed artifact;
uninstall without removing or exposing another seat's state.
Development
python3 -m unittest discover -s testsThe design and prior-art record lives in docs/step0.md.
Available Tools
4 toolsnous_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
Scored across 4 tools
Each tool has a clear, distinct purpose: checking configuration, listing routes, starting device-code login, and polling for authentication. No ambiguity or overlap exists.
All tool names follow a consistent snake_case pattern with 'nous_portal_' prefix, making them predictable and easy to understand.
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.
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
Related MCP Connectors
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
Unofficial remote MCP server for Less Annoying CRM: OAuth 2.1, read-only grants, 10 tools.
Public, read-only MCP server for FarmNeural company facts, packages, and capabilities.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMinimal 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.-
- AlicenseNot gradedqualityCmaintenanceA 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
- FlicenseNot gradedqualityDmaintenanceA read-only MCP server that exposes ByteForge Aegis admin API tools to query production configuration (sites, users, health) without any mutation risk.-
- AlicenseNot gradedqualityCmaintenanceA 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