Available tools
The Port MCP Server exposes different sets of tools based on your role and use case. The tools you see will depend on your permissions in Port.
- Developer
- Builder
Developers are typically users who consume and interact with the software factory - querying services, running actions, and analyzing data. These tools help you get information and execute approved workflows.
Actions & workflows9 tools
get_action_permissionsget_workflow_runlist_actionslist_self_service_triggers to discover those. API Referencelist_self_service_triggerstrigger_run to discover available operations and required inputs. API Referencelist_workflowsrun_actionDynamictrigger_run when you want one tool that covers both workflow runs and action runs. API Referencesubmit_input_node_responseget_run and read the input node run's output.evaluatedConfig for the description, form, and buttons, then submit the chosen button and inputs. Only responders on the node can submit. API Referencetrack_action_runtrigger_runtype: "WORKFLOW", the workflow identifier, the nodeIdentifier from list_self_service_triggers, and inputs matching the trigger schema. For actions, pass type: "ACTION" and the action identifier. Returns the run identifier and status so you can track progress. API ReferenceAudit logs1 tool
search_audit_logsData model3 tools
list_blueprintslist_entitiesinclude. Supports identifiers, groupBy for value distribution, and countOnly for a total count. API ReferenceThe following are behaviors that are easy to miss and cause confusions:
- These are the available operators by property type:
- string/enum:
=,!=,in,notIn,contains,doesNotContains,beginsWith,endsWith,isEmpty,isNotEmpty - number/date:
=,!=,>,>=,<,<=,between,notBetween,isEmpty,isNotEmpty - array:
contains,containsAny,doesNotContains,isEmpty,isNotEmpty - boolean:
=,!=,isEmpty,isNotEmpty
- string/enum:
- The include parameter accepts mirror and calculation properties: Use mirror and calculation property identifiers in the include parameter to retrieve computed or inherited values alongside regular properties.
- Set membership with in/notIn operators: Use
inornotInwith an array value to filter enum/string properties by multiple values:{ "property": "status", "operator": "in", "value": ["active", "pending"] }. This avoids needing verbose nested "or" blocks for multi-value checks. - Empty arrays in filter operators:
in: []returns 0 results (no entity matches an empty set)notIn: []returns all results (every entity passes an empty exclusion list)
- Limit controls groups returned when using groupBy: When groupBy is active, limit controls the number of groups returned, not entities. For example, limit: 5 with groupBy returns at most 5 groups.
groupByincludes a null value group: Results always include a group with {"value": null} representing entities where the grouped property is not set.- The
=operator on array properties returns 0 results: Using the=operator on an array-type property returns 0 results. Use thecontainsoperator instead for array properties.
simulate_blueprint_permissionsGeneral5 tools
describe_user_detailsload_skillsearch_port_knowledge_sourcesget_port_knowledge_documentsgive_port_feedbackPages & dashboards3 tools
get_pageBetaget_sidebarBetaload_widget_schemaBetaScorecards1 tool
list_scorecardsBuilders are platform engineers or admins who design and configure your Port environment - creating blueprints, setting up scorecards, and managing the overall structure. These tools help you build and maintain the factory.
Builders have access to all the tools available to Developers, plus additional management tools for creating and configuring the portal.
Actions & workflows14 tools
delete_actiondelete_workflowget_action_permissionsget_workflow_runlist_actionslist_self_service_triggers to discover those. API Referencelist_self_service_triggerstrigger_run to discover available operations and required inputs. API Referencelist_workflowsrun_actionDynamictrigger_run when you want one tool that covers both workflow runs and action runs. API Referencesubmit_input_node_responseget_run and read the input node run's output.evaluatedConfig for the description, form, and buttons, then submit the chosen button and inputs. Only responders on the node can submit. API Referencetrack_action_runtrigger_runtype: "WORKFLOW", the workflow identifier, the nodeIdentifier from list_self_service_triggers, and inputs matching the trigger schema. For actions, pass type: "ACTION" and the action identifier. Returns the run identifier and status so you can track progress. API Referenceupdate_action_permissionsupsert_actionchange-an-action-automation. API Referenceupsert_workflowAudit logs1 tool
search_audit_logsData model8 tools
delete_blueprintdelete_entitylist_blueprintslist_entitiesinclude. Supports identifiers, groupBy for value distribution, and countOnly for a total count. API ReferenceThe following are behaviors that are easy to miss and cause confusions:
- These are the available operators by property type:
- string/enum:
=,!=,in,notIn,contains,doesNotContains,beginsWith,endsWith,isEmpty,isNotEmpty - number/date:
=,!=,>,>=,<,<=,between,notBetween,isEmpty,isNotEmpty - array:
contains,containsAny,doesNotContains,isEmpty,isNotEmpty - boolean:
=,!=,isEmpty,isNotEmpty
- string/enum:
- The include parameter accepts mirror and calculation properties: Use mirror and calculation property identifiers in the include parameter to retrieve computed or inherited values alongside regular properties.
- Set membership with in/notIn operators: Use
inornotInwith an array value to filter enum/string properties by multiple values:{ "property": "status", "operator": "in", "value": ["active", "pending"] }. This avoids needing verbose nested "or" blocks for multi-value checks. - Empty arrays in filter operators:
in: []returns 0 results (no entity matches an empty set)notIn: []returns all results (every entity passes an empty exclusion list)
- Limit controls groups returned when using groupBy: When groupBy is active, limit controls the number of groups returned, not entities. For example, limit: 5 with groupBy returns at most 5 groups.
groupByincludes a null value group: Results always include a group with {"value": null} representing entities where the grouped property is not set.- The
=operator on array properties returns 0 results: Using the=operator on an array-type property returns 0 results. Use thecontainsoperator instead for array properties.
simulate_blueprint_permissionstrigger_auto_discoveryupsert_blueprintupsert_entityExternal interfaces3 tools
list_external_interface_appsrevoke_external_interface_appupsert_external_interface_appThe following are behaviors that are easy to miss and cause confusions:
- Create vs update: Omit appId to create — name and redirectUris are both required. Pass appId to update — at least one of name or redirectUris must be provided. Use the app's id (not clientId) as appId.
- redirectUris replaces the full set: When updating, redirectUris replaces the entire existing set rather than merging with it. Pass the full list the app should end up with.
General5 tools
describe_user_detailsload_skillsearch_port_knowledge_sourcesget_port_knowledge_documentsgive_port_feedbackIntegrations5 tools
get_integration_event_logsget_integration_kinds_with_examplesget_integration_sync_metricslist_integrationstest_integration_mappingPages & dashboards15 tools
delete_sidebar_folderBetadelete_widgetBetaduplicate_pageBetaget_pageBetaget_sidebarBetaload_widget_schemaBetamove_pageBetaupdate_entity_pageBetaThe following are behaviors that are easy to miss and cause confusions:
- Entity page identifier format: Entity page identifier is "{blueprintIdentifier}Entity" (for example, "serviceEntity"). Call get_page first to see existing tabs.
- Prefer upsert_widget for single widget changes: Use upsert_widget with tabTitle when updating one widget instead of this tool.
- tabOrder controls tab order and deletion: Provide tabOrder with every remaining tab title in display order. Custom tabs omitted from tabOrder are deleted. Reserved tabs (Overview, Runs, Audit Log, Related Entities) cannot be removed.
- pageFilters uses replace-all semantics: When provided, pageFilters replaces the entire filter list. Omit to leave filters unchanged, or pass an empty array to clear all filters.
upsert_dashboard_pageBetaThe following are behaviors that are easy to miss and cause confusions:
- pageFilters uses replace-all semantics: When provided, pageFilters replaces the entire filter list. Omit to leave filters unchanged, or pass an empty array to clear all filters. Call get_page first to see existing filters.
upsert_sidebar_folderBetaupsert_widgetBetalist_pluginslist_available_library_pluginsinstall_library_pluginThe following are behaviors that are easy to miss and cause confusions:
- Required install order: 1. load_skill({ name: "install-plugin-library" }). 2. list_available_library_plugins - read readmeContent. 3. list_blueprints - check Prerequisites and Catalog. 4. Confirm missing properties with the user and wait for their answer. 5. upsert_blueprint when catalog setup is confirmed - copy property schemas verbatim from README JSON. 6. install_library_plugin.
upsert_pluginScorecards3 tools
delete_scorecardlist_scorecardsupsert_scorecardTool support in external MCP clients depends on whether the client implements the tools feature according to the MCP specification. Most MCP clients support tools. Check the MCP client documentation to see which features your client supports.
Select which tools to use
By default, when you open a chat with Port MCP, all available tools (based on your permissions) are loaded and ready to use. However, you can customize which tools are available if you want to focus on specific workflows.
For example, if you only want to query data from Port without building or modifying anything, you can limit the tools to just the read-only ones. This helps reduce complexity and ensures you don't accidentally make changes.
Using headers to control tool availability
You can use headers when configuring your MCP server connection to control which tools are available:
Read-only mode - The x-read-only-mode header controls whether write tools are available. Set it to 1 to restrict the MCP server to only expose read-only tools, completely hiding write tools from the available tools list. Set it to 0 (default) to allow all tools based on your permissions.
Control actions - The x-allowed-actions-to-run header controls which actions are available through the run_action tool. This header accepts a comma-separated list of action identifiers. Only the specified actions will be available. If the header is not specified, all actions you have permission to run will be available. If set to an empty string, no actions will be allowed to run.
Examples:
x-allowed-actions-to-run: "create_github_issue,create_incident"- Allows only the specified GitHub and incident actions.x-allowed-actions-to-run: "create_service,deploy_to_production"- Allows only the specified deployment actions.x-allowed-actions-to-run: ""- No actions will be allowed to run.
See the token-based authentication guide for examples of how to configure these headers.
Using client UI to select tools
- Cursor
- VSCode
- Claude
In Cursor, you can customize which tools are available through the UI after connecting to Port MCP. Once connected, you can select specific tools as shown below.

In VSCode, you can choose the tools through the UI after connecting to Port MCP.

When creating a custom connector in Claude, you can specify exactly which tools to expose instead of enabling everything.

Refer to the Claude custom connector documentation for detailed instructions.