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.
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_proposalsandget_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 athttps://sandbox.api.portal.io; production credentials belong athttps://api.portal.io.request signature (hash) is invalid: first confirmPORTAL_USER_API_KEYis the Base64meta.apiKeyreturned 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
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.