Port MCP Server
About
An MCP server for Port.io that enables advanced automations and natural language interactions for developers and AI applications.
Details
- Author
- port-labs
- Categories
- Developer Tools
Jump to
Docker Configuration Example formcphub.nvim
](https://ravitemer.github.io/mcphub.nvim/)[!NOTE] Make sure that you have the environment variablesPORT_CLIENT_IDandPORT_CLIENT_SECRETset with your Port credentials.
{ "mcpServers": { "port": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "PORT_CLIENT_ID", "-e", "PORT_CLIENT_SECRET", "-e", "PORT_REGION", "ghcr.io/port-labs/port-mcp-server:latest" ], "env": { "PORT_REGION": "EU", "PORT_CLIENT_ID": "", "PORT_CLIENT_SECRET": "" } } } }
An MCP server for Port.io that enables advanced automations and natural language interactions for developers and AI applications.
⚠️ This Repository is No Longer Maintained
[!WARNING]This repository has been deprecated and is no longer actively maintained or supported.No further updates, bug fixes, or security patches will be provided.
Migrate to Port's Remote MCP Server
We strongly encourage all users to migrate toPort's Remote MCP Server, which is the actively maintained and supported solution.
The Remote MCP Server offers full feature parity and ongoing improvements backed by the Port team.
ThePort IOMCP server is aModel Context Protocol (MCP)server, enabling advanced automations and natual language interactions for developers and AI applications.
- Get entity details- "Who is the owner of service X?"
- Check on-call status- "Who is on call right now?"
- Get catalog insights- "How many services do we have in production?"
- Identify weak points- "Which services are failing for the gold level and why?"
- Get compliance status- "Show me all services that don't meet our security requirements"
- Improve quality- "What do I need to fix to reach the next scorecard level?"
- Build scorecards- "Create a new scorecard called 'Security Posture' with levels Basic, Silver, and Gold"
- Define rules- "Add a rule that requires services to have a team owner to reach the Silver level"
- Setup quality gates- "Create a rule that checks if services have proper documentation"
- Fetch action permissions- "What are the current permission settings for this action?"
- Update action policies- "Configure approval workflows for the deployment action"
- Configure dynamic permissions- "Set up team-based access control for this action"
We're continuously expanding Port MCP's capabilities. Have a suggestion? We'd love to hear your feedback on ourroadmap!
-
Create a Port Account (if you don't have one):
- Navigate to your Port dashboard
- Go to Settings > Credentials
- Save both the Client ID and Client Secret
- EitherDockerinstalled on your system
- ORuvxpackage manager installed
[!NOTE] You will also need to provide your Port region, which is either EU or US. If not provided, the default is EU.
Port MCP Server can be installed using two methods:
Use our officialPort MCP serverpackage with uvx for easy installation and management.
-
Create a Python Virtual Environment(Recommended)
# On Linux/macOS: source venv/bin/activate # On Windows: venv\Scripts\activate
# Using Homebrew (macOS/Linux): brew install uv # Or using pip: pip install uv
export PORT_CLIENT_ID="your_port_client_id" export PORT_CLIENT_SECRET="your_port_client_secret" export PORT_REGION="EU" # or "US"
Set Python Path(if using virtual environment)
export PYTHONPATH="/path/to/your/venv/bin/python"
uvx mcp-server-port --client-id your_port_client_id --client-secret your_port_client_secret --region EU --log-level DEBUG
Verify Server is RunningYou should start seeing logs from the server. You can also check the log file:
docker pull ghcr.io/port-labs/port-mcp-server:latest
See below for detailed instructions on each MCP client.
You can pass these additional arguments for more advanced configuration:
- Go to Settings > Developer and click on "Edit config".
- Edit theclaude_desktop_config.jsonfile and add the below configuration based on the installation method.
- Save the file and restart Claude.
- In a new chat, check the Tools section and you'll see Port available tools.
[!TIP] Consider using the full path to Docker (e.g.,/usr/local/bin/docker) instead of justdocker. You can find this path by runningwhich dockerin your terminal. Using the full path helps avoid PATH resolution issues and ensures consistent behavior across different shell environments.
{ "mcpServers": { "port": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "PORT_CLIENT_ID", "-e", "PORT_CLIENT_SECRET", "-e", "PORT_REGION", "-e", "PORT_LOG_LEVEL", "ghcr.io/port-labs/port-mcp-server:latest" ], "env": { "PORT_CLIENT_ID": "<PORT_CLIENT_ID>", "PORT_CLIENT_SECRET": "<PORT_CLIENT_SECRET>", "PORT_REGION": "<PORT_REGION>", "PORT_LOG_LEVEL": "<PORT_LOG_LEVEL>" } } } }
[!NOTE] If you want to run the command from a virtual Python environment, add aPYTHONPATHvariable to theenvobject with its path, e.g.,/path/to/your/venv/bin/python.
{ "mcpServers": { "Port": { "command": "uvx", "args": [ "mcp-server-port@0.2.8", "--client-id", "<PORT_CLIENT_ID>", "--client-secret", "<PORT_CLIENT_SECRET>", "--region", "<PORT_REGION>" ], "env": { "PORT_CLIENT_ID": "<PORT_CLIENT_ID>", "PORT_CLIENT_SECRET": "<PORT_CLIENT_SECRET>", "PORT_REGION": "<PORT_REGION>", "PYTHONPATH": "/Users/matangrady/.venv-port-mcp/bin/python" } } } }
- Go to Cursor > Settings > Cursor Settings.
- Click on the MCP tab, and "Add new global MCP server".
- Edit themcp.jsonfile and add the below configuration based on the installation method.
- Save the file and return to Cursor Settings.
- You will see the new Port server and its available tools.
[!TIP] Consider using the full path to Docker (e.g.,/usr/local/bin/docker) instead of justdocker. You can find this path by runningwhich dockerin your terminal. Using the full path helps avoid PATH resolution issues and ensures consistent behavior across different shell environments.
{ "mcpServers": { "port": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "PORT_CLIENT_ID", "-e", "PORT_CLIENT_SECRET", "-e", "PORT_REGION", "-e", "PORT_LOG_LEVEL", "ghcr.io/port-labs/port-mcp-server:latest" ], "env": { "PORT_CLIENT_ID": "<PORT_CLIENT_ID>", "PORT_CLIENT_SECRET": "<PORT_CLIENT_SECRET>", "PORT_REGION": "<PORT_REGION>", "PORT_LOG_LEVEL": "<PORT_LOG_LEVEL>" } } } }
[!NOTE] If you want to run the command from a virtual Python environment, add aPYTHONPATHvariable to theenvobject with its path, e.g.,/path/to/your/venv/bin/python.
{ "mcpServers": { "Port": { "command": "uvx", "args": [ "mcp-server-port@0.2.8", "--client-id", "<PORT_CLIENT_ID>", "--client-secret", "<PORT_CLIENT_SECRET>", "--region", "<PORT_REGION>" ], "env": { "PORT_CLIENT_ID": "<PORT_CLIENT_ID>", "PORT_CLIENT_SECRET": "<PORT_CLIENT_SECRET>", "PORT_REGION": "<PORT_REGION>", "PYTHONPATH": "/Users/matangrady/.venv-port-mcp/bin/python" } } } }
[!TIP] VS Code can automatically discover MCP servers already installed in Cursor and Claude.
[!NOTE] For quick installation, use the one-click install buttons and select where to add the MCP configuration. Make sure to replace the placeholders with your Port credentials.
Docker quick installationuvx quick installation
For manual installation follow these steps:
- Go to the Command Palette by pressingCmd + Shift + P/Ctrl + Shift + P.
- TypePreferences: Open User Settings (JSON)and press enter.
- Edit thesettings.jsonfile and add the below configuration under themcp>servers.
- Use Copilot in Agent mode, make sure the server is running and see its available Port tools.
[!TIP] Consider using the full path to Docker (e.g.,/usr/local/bin/docker) instead of justdocker. You can find this path by runningwhich dockerin your terminal. Using the full path helps avoid PATH resolution issues and ensures consistent behavior across different shell environments.
"Port": { "type": "stdio", "command": "docker", "args": [ "run", "-i", "--rm", "-e", "PORT_CLIENT_ID", "-e", "PORT_CLIENT_SECRET", "-e", "PORT_REGION", "ghcr.io/port-labs/port-mcp-server:latest" ], "env": { "PORT_CLIENT_ID": "<PORT_CLIENT_ID>", "PORT_CLIENT_SECRET": "<PORT_CLIENT_SECRET>", "PORT_REGION": "<PORT_REGION>" } }
[!NOTE] If you want to run the command from a virtual Python environment, add aPYTHONPATHvariable to theenvobject with its path, e.g.,/path/to/your/venv/bin/python.
"Port": { "type": "stdio", "command": "uvx", "args": [ "mcp-server-port@0.2.8", "--client-id", "<PORT_CLIENT_ID>", "--client-secret", "<PORT_CLIENT_SECRET>", "--region", "<PORT_REGION>" ], "env": { "PORT_CLIENT_ID": "<PORT_CLIENT_ID>", "PORT_CLIENT_SECRET": "<PORT_CLIENT_SECRET>", "PORT_REGION": "<PORT_REGION>" } }
To use Port MCP Server in Neovim, use the pluginmcphub.nvimwith one of the supported LLM extensions, such asAvanteorCodeCompanion.
Once installed, add Port's MCP server configuration:
- Access the servers config with the command:MCPHuband navigate to the Config tab, or open the servers config file directly, usually located at~/.config/mcphub/servers.json.
- Add the configuration for Port MCP Server under themcpServerssection (see below).
- Save the configuration file.
- Make sure you have the environment variablesPORT_CLIENT_IDandPORT_CLIENT_SECRETset in your Neovim environment.
- Restart the servers by opening the MCPHub view with:MCPHuband triggering the restart command withR.
- You should see the server running and accessible from the MCPHub view. To verify, use the@mcptool in your LLM extension. For example, prompt:@mcp list my blueprints.
Check themcphub.nvim documentationfor more details on how to use it.
Docker Configuration Example formcphub.nvim
[!NOTE] Make sure that you have the environment variablesPORT_CLIENT_IDandPORT_CLIENT_SECRETset with your Port credentials.
{ "mcpServers": { "port": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "PORT_CLIENT_ID", "-e", "PORT_CLIENT_SECRET", "-e", "PORT_REGION", "ghcr.io/port-labs/port-mcp-server:latest" ], "env": { "PORT_REGION": "EU", "PORT_CLIENT_ID": "", "PORT_CLIENT_SECRET": "" } } } }
uvxConfiguration Example formcphub.nvim
[!NOTE] Make sure that you have the environment variablesPORT_CLIENT_IDandPORT_CLIENT_SECRETset with your Port credentials.
{ "mcpServers": { "port": { "command": "uvx", "args": [ "mcp-server-port@0.2.8", "--client-id", "PORT_CLIENT_ID", "--client-secret", "PORT_CLIENT_SECRET", "--region", "PORT_REGION" ], "env": { "PORT_CLIENT_ID": "", "PORT_CLIENT_SECRET": "", "PORT_REGION": "EU" } } } }
- Retrieve a list of all blueprints from Port
- Optional inputs:
- detailed(boolean, default: false): Return complete schema details for each blueprint
- Retrieve information about a specific blueprint by its identifier
- Required inputs:
- blueprint_identifier(string): The unique identifier of the blueprint to retrieve
- detailed(boolean, default: true): Return complete schema details
- Create a new blueprint in Port
- Required inputs:
- Various fields including identifier, title, properties, etc.
- Update an existing blueprint
- Required inputs:
- identifier(string): The unique identifier of the blueprint to update
- Various fields to update
- Delete a blueprint from Port
- Required inputs:
- blueprint_identifier(string): The unique identifier of the blueprint to delete
- Retrieve all entities for a given blueprint
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint to get entities for
- detailed(boolean, default: false): Return complete entity details including properties
- Retrieve information about a specific entity
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint the entity belongs to
- entity_identifier(string): The unique identifier of the entity to retrieve
- detailed(boolean, default: true): Return complete entity details
- Create a new entity for a specific blueprint
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint to create the entity for
- entity(object): The entity data following the blueprint schema
- Update an existing entity
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint the entity belongs to
- entity_identifier(string): The unique identifier of the entity to update
- entity(object): The updated entity data
- Delete an entity
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint the entity belongs to
- entity_identifier(string): The unique identifier of the entity to delete
- delete_dependents(boolean, default: false): If true, also deletes all dependencies
- Retrieve all scorecards from Port
- Optional inputs:
- detailed(boolean, default: false): Return complete scorecard details
- Retrieve information about a specific scorecard by its identifier
- Required inputs:
- scorecard_id(string): The unique identifier of the scorecard to retrieve
- blueprint_id(string, optional): The identifier of the blueprint the scorecard belongs to
- Create a new scorecard for a specific blueprint
- Required inputs:
- blueprint_id(string): The identifier of the blueprint to create the scorecard for
- identifier(string): The unique identifier for the new scorecard
- title(string): The display title of the scorecard
- levels(list): List of levels for the scorecard
- rules(list): List of rules for the scorecard
- description(string): Description for the scorecard
- Update an existing scorecard
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint the scorecard belongs to
- scorecard_identifier(string): The unique identifier of the scorecard to update
- Various fields to update (title, levels, rules, etc.)
- Delete a scorecard from Port
- Required inputs:
- blueprint_identifier(string): The identifier of the blueprint the scorecard belongs to
- scorecard_identifier(string): The unique identifier of the scorecard to delete
- invoke_ai_agent
- Invoke a Port AI agent with a specific prompt
- Required inputs:
- prompt(string): The prompt to send to the AI agent
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





