portal-api

portal-api

A read-only MCP server for Portal.io that enables browsing proposals, users, contacts, and catalog items through secure HMAC-signed API requests.

Category
Visit Server

README

Portal.io API MCP

A local, read-only MCP server for a Portal.io account. It signs API requests with Portal's HMAC-SHA256 scheme and makes account data available to Codex through structured tools.

Included tools

  • test_connection: confirm the current credentials can make a read-only request.
  • list_proposals and get_proposal: browse proposal summaries and details.
  • list_users: look up Portal salesperson IDs.
  • search_contacts: find contacts in the Portal account.
  • search_catalog: search account catalog items when Catalog API access is enabled.

Version 0.1.0 contains no mutation tools. It cannot create, update, archive, or send anything in Portal.

Install

git clone https://github.com/AWfusion/portal-api-mcp.git
cd portal-api-mcp
npm ci
cp .env.example .env

Fill in .env with credentials from the same Portal environment:

PORTAL_ENV=sandbox
PORTAL_BASE_URL=https://sandbox.api.portal.io
PORTAL_APP_ID=your-api-application-key
PORTAL_SECRET_KEY=your-secret-key
PORTAL_USER_API_KEY=the-meta-apiKey-value-from-the-credential-exchange
PORTAL_WRITE_ENABLED=false

For production, use PORTAL_ENV=production and PORTAL_BASE_URL=https://api.portal.io only when Portal has issued and enabled production credentials for the integration.

PORTAL_USER_API_KEY must be the exact meta.apiKey returned by GET /authenticate/apikeyexchange. Do not substitute the application ID, secret key, a Portal UI token, or the username/password used for the one-time exchange. Portal's returned User API Key is Base64-encoded and is normally 44 characters long.

The actual .env file is ignored by Git. Keep its permissions owner-only:

chmod 600 .env

Verify

npm test
npm run verify

npm run verify performs a local MCP initialization, confirms every tool is registered, and makes one read-only GET /public/proposals?PageNumber=1&PageSize=1 call. It outputs no credentials.

Register Globally in Codex

Run the included installer from the project directory:

./scripts/install-codex-mcp.sh

It registers this local process globally under the name portal-api. Confirm it with:

codex mcp get portal-api

Restart Codex or open a new task after registration so the tools are discovered. Typical requests include “list my most recently modified Portal proposals” and “search the catalog for Denon receivers.”

Troubleshooting

  • app id could not be found: the API application ID is not enabled for the selected base URL. Sandbox credentials belong at https://sandbox.api.portal.io; production credentials belong at https://api.portal.io.
  • request signature (hash) is invalid: first confirm PORTAL_USER_API_KEY is the Base64 meta.apiKey returned by the credential exchange, then confirm the app ID, secret, and User API Key all came from the same environment.
  • Catalog queries return authorization errors: ask Portal to enable Catalog API access for the account.

Development

The server uses Node 20 or newer and has no database or hosted component. Request signing follows Portal's current HMAC documentation: GET signatures omit query parameters and content type; the API secret is used as the raw ASCII HMAC key and is not Base64-decoded.

See CHANGELOG.md for release history and BUILD-INFO.md for the release contract.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured