OpenAICodex

Connect Codex to Portal.io

Run Codex as a hosted agent in NoClick with Portal.io wired into its tools handle. It can use Portal.io directly while it works. No glue code, nothing to install. Click below to open a ready-to-run agent and connect your account.
Loading preview…
Opens a workflow with 21 tools ready to use.

Set up in minutes

The open button drops you into a guided setup. It asks exactly this, nothing else:
  1. Choose where it runs

    On your computer through your own Codex, or hosted in the cloud. The rest of setup adapts to your choice:

  2. Pick what it can do in Portal.io

    A preset of real Portal.io operations. Each one becomes a tool the agent can call, and it can't touch anything outside the list.

  3. Connect Portal.io

    One sign-in. The agent acts through your account, scoped to the operations you picked.

  4. Add your personal MCP link

    The last step mints a private MCP URL for this agent and walks you through exactly this, with your real link filled in. The page flips to Connected the moment your Codex first calls in. Codex connects when a session starts — run codex, or restart a running one (in the Codex app, Restart).

    Run this in your terminal. The Codex app shares its config, so it gets the server too

    $codex mcp add noclick --url https://mcp.noclick.app/s/<your-link>

    <your-link> is your personal server URL — setup mints it for you.

Tools Codex gets

Pick the operations you want and each becomes a tool the agent can call directly while it works.

Portal.io

21 tools
List Proposals

Returns the proposals for the current account. Supports filtering by status, contact, modified date, search text, and archive state, along with sorting and pagination.

Create Proposal

Creates a new proposal for the authenticated account. Supply a salesperson ID from the same account and, optionally, a proposal name. If no name is given, the system assigns a default name using the same logic as the Portal UI. The response includes the full proposal detail, including the new proposal ID, number, status, and financial summary.

Get Proposal

Returns detailed information for the specified proposal. The HTTP response also sets the Last-Modified header from the response LastModifiedDate. Item costs are left out when costs are not available to your account, so a null cost does not mean the item has none. A recurring-service item is left out of its area option's total and counted in that option's totalRecurringService instead. When an item has total.isCombinedPrice true, its amount already includes the totals of the items nested under it, and those nested items still report their own amounts.

Update Proposal

Performs a partial update on an existing proposal. You can update the proposal name, reassign the salesperson, or do both in one request. Both fields are optional, and omitted fields keep their current values. SalesPersonId must reference a user in the same account. The response includes the full updated proposal detail.

Update Description

Updates the client-facing project description of a proposal. This is the description shown on customer-facing proposal documents. The request body accepts a single description string. The response includes the full updated proposal detail.

Update Internal Notes

Updates the internal installer notes (installer project description) of a proposal. These notes are visible only to the dealer's team and do not appear on client-facing documents. The request body accepts a single internal notes string. The response includes the full updated proposal detail.

Get Change Order

Returns detailed information for the specified change order. The HTTP response also sets the Last-Modified header from the response LastModifiedDate. Item costs are left out when costs are not available to your account, so a null cost does not mean the item has none. A recurring-service item is left out of its area option's total and counted in that option's totalRecurringService instead. When an item has total.isCombinedPrice true, its amount already includes the totals of the items nested under it, and those nested items still report their own amounts.

List Change Orders

Returns the change orders for the specified proposal, including customer details, total, status, and created and modified dates.

Add Area

Creates a new area (room) within a proposal. The area name must be unique within the proposal. The system automatically creates one default option in 'Draft' status under the new area. The response includes the full updated proposal detail, including the new area and its default option.

Add Area Option

Creates a new option within an existing area. Each area supports a maximum of three options. Client description and internal installer notes are optional at creation time. The new option is created with 'Draft' status. The response includes the full updated proposal detail.

Assign Contact

Assigns an existing contact (person/client) to a proposal. The proposal and contact must belong to the same account. If the contact has a single primary location, that location is automatically assigned to the proposal as well. Assigning a contact may trigger tax recalculations based on the contact's location.

Assign Location

Assigns a location to a proposal that already has a contact assigned. The location must belong to the proposal's assigned contact and to the same account. Assigning a location triggers tax recalculations for the proposal. The response includes the full updated proposal detail.

List Contacts

Returns a paged list of contacts for the current account. Supports search, contact type filtering, sorting, and pagination. Pagination defaults to PageNumber 1 and PageSize 10 when values are missing or less than or equal to 0.

Create Contact

Creates a contact in the current account. PartyType, ContactType, and FirstName are required. CompanyName is also required when PartyType is Company.

Get Contact

Returns the contact details for the specified person. PrimaryLocation and BillingLocation are included when available. When IncludeCounts is true, the response also includes proposal and payment counts for the contact.

List Contact Locations

Returns the contact's locations. Results are ordered with the primary location first, then the billing location, then the most recently modified locations. Pagination defaults to PageNumber 1 and PageSize 10. When PageNumber is less than or equal to 0, all matching locations are returned.

Create Contact Location

Adds a location to the specified contact. Street is required. When Country is provided, State is also required. Use IsPrimary to make the new location the primary location and IsBilling to make it the billing location.

List Users

Returns a list of all active users within the authenticated caller's account. The response includes basic, non-sensitive user details: user ID, first name, last name, email address, and the user's permission group. This is a read-only endpoint intended for integrations that need to look up user IDs before assigning them as salespersons on proposals or for syncing user data with external systems.

Search Catalog

Searches the catalog using the provided category, brand, supplier, industry, stock, favorite, price, and item type filters. CategoryId and CategoryIds are mutually exclusive, and ParentCategoryId and ParentCategoryIds are mutually exclusive. If SearchText is omitted it is treated as an empty string. ItemType defaults to Part.

List Categories

Returns the catalog category hierarchy grouped by industry, including category image URLs when available.

Get Catalog Item

Returns details for the requested catalog item. When ItemType is Labor or CustomItem, the item is returned from the current account's library; otherwise a standard catalog item is returned. ExtendedDetails adds extra information to standard catalog item responses.

About Codex

Codex is OpenAI's command-line coding agent. NoClick runs it as a hosted agent and lets you connect your apps to it as tools, turning it from a coding assistant into an operator that can act across your systems. Connect an integration to the agent and Codex can query, create, and update records in that app directly. You keep the Codex experience and give it real reach into the tools your team already uses.
Fast, capable code generation and editing
Good at well-scoped, concrete tasks
Strong at API and data manipulation
Familiar to teams already on OpenAI tooling

Frequently asked questions

More ways to connect

Open your Codex agent in one click.

NoClick runs Codex for you with Portal.io wired in as tools. Connect your account and run.