portal-api
Click on "Install 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., "@portal-apilist my recent proposals"
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.
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.
Related MCP server: readonly-mcp-akamai
Install
git clone https://github.com/AWfusion/portal-api-mcp.git
cd portal-api-mcp
npm ci
cp .env.example .envFill 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=falseFor 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 .envVerify
npm test
npm run verifynpm 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.shIt registers this local process globally under the name portal-api. Confirm it with:
codex mcp get portal-apiRestart 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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AWfusion/portal-api-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server