portal-api
This read-only MCP server provides access to Portal.io account data through a set of tools, allowing you to test credentials, browse proposals, search contacts, list users, and search the catalog (if enabled). All operations are strictly read-only; no creating, updating, archiving, or sending data is possible.
test_connection: Verify Portal.io API credentials are valid.
list_proposals: List/search proposals with filters (status, contact, text, date modified) and pagination.
get_proposal: Get complete proposal details by ID.
list_users: List active users, useful for finding salesperson IDs.
search_contacts: Search contacts by name, company, email, phone, or contact type (Person/Company), with sorting and pagination.
search_catalog: Search the product catalog by brand, category, text, or stock status; requires Catalog API access to be enabled.
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.1 contains no mutation tools. It cannot create, update, archive, or send anything in Portal.
Related MCP server: readonly-mcp-server
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 API contract: GET signatures include the fully encoded request URL and omit the 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.
Related MCP Servers
- AlicenseAqualityBmaintenanceRead-only MCP server for the RareCloud API, enabling AI agents to list servers, browse the catalog, check billing, and plan deployments.10010MIT
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server with configurable transport (stdio or HTTP+SSE), API key authentication, and scope-based authorization for read and search operations on documents.
- AlicenseAqualityDmaintenancePortable, read-only MCP server for Nous Portal capabilities, providing configuration status, route derivation, and OAuth device code authentication without invoking paid tools.4MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server that provides tools to list and read devices, MDM servers, blueprints, configurations, apps, packages, users, and other resources from Apple Business Manager and Apple School Manager.MIT
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only MCP server for searching Japan government procurement bid information from the KKJ portal.
Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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