Skip to main content
Glama
pulumi

@pulumi/mcp-server

Official
by pulumi

Pulumi MCP Server

The Pulumi MCP Server enables advanced Infrastructure as Code development capabilities for connected agents.

Features

Available Tools

Tool

Description

pulumi-registry-list-resources

Browse available cloud resources to discover what infrastructure components can be deployed

pulumi-registry-list-functions

Explore available provider functions for interacting with cloud resources

pulumi-registry-get-resource

Get code examples and documentation for specific resources that can be deployed

pulumi-registry-get-function

Access examples of provider functions for usage in your Pulumi program

pulumi-registry-get-type

Get schema definitions needed to properly set up complex resource properties and types

pulumi-cli-preview

Preview infrastructure changes before deployment, showing what resources will be created, updated, or deleted

pulumi-cli-up

Deploy infrastructure changes to the cloud, creating and updating resources as defined in your Pulumi program

pulumi-cli-stack-output

Retrieve deployment outputs like URLs and resource IDs from your infrastructure stacks

pulumi-cli-refresh

Sync your Pulumi state with actual cloud resources to detect drift and manual changes

pulumi-resource-search

Discover, count, and analyze your deployed infrastructure across all cloud providers.

neo-task-launcher

Interact with Pulumi Neo for advanced infrastructure tasks

Available Prompts

Prompt

Description

deploy-to-aws

Get step-by-step guidance for deploying already written applications to the cloud with Pulumi, including security and cost optimization tips

Related MCP server: mcp-perplexity

Installation

Requirements

  1. Pulumi CLI must be installed on the client machine

  2. Docker (optional) - Required only for containerized deployment

Usage with Claude Code

For Claude Code, install the MCP server using:

claude mcp add -s user pulumi -- npx @pulumi/mcp-server@latest stdio

Usage with Claude Desktop

For Claude Desktop, add the following configuration to your MCP config file:

{
  "mcpServers": {
    "pulumi": {
      "command": "npx",
      "args": ["@pulumi/mcp-server@latest", "stdio"]
    }
  }
}

Usage with VSCode

Create a file called .vscode/mcp.json in your workspace. Add the following section, and the MCP will become accessible to your assistant:

{
  "servers": {
    "pulumi": {
      "command": "npx",
      "args": ["@pulumi/mcp-server@latest", "stdio"]
    }
  }
}

Alternatively, you can add the following to your user configuration and be able to use the MCP server everywhere. You can open the configuration by pressing Ctrl + Shift + P and typing Preferences: Open User Settings (JSON):

{
  "mcp": {
    "servers": {
      "pulumi": {
        "command": "npx",
        "args": ["@pulumi/mcp-server@latest", "stdio"]
      }
    }
  }
}

Devin

For Devin, you can set up the Pulumi MCP Server by:

  1. Navigating to https://app.devin.ai/settings/mcp-marketplace/setup/pulumi

  2. Providing your Pulumi access token, which can be obtained from the Access tokens section in the sidebar of the Pulumi dashboard

  3. Clicking "Enable"

More about using the MCP server with other popular clients: Pulumi MCP Server Documentation.

Docker Installation

The Pulumi MCP Server can additionally be run as a Docker container, eliminating the need to install Node.js and package dependencies directly on your host machine.

Using the Official Image

Pull the official image built by Docker:

docker pull mcp/pulumi:latest

Building Locally

Or build the container with local changes:

docker build -t pulumi/mcp-server:latest .

Usage With Agents

STDIO Mode

Run the server in basic STDIO configuration:

{
  "mcpServers": {
    "pulumi": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "PULUMI_ACCESS_TOKEN=your-access-token",
        "mcp/pulumi:latest", "stdio"
      ]
    }
  }
}

With Local Project Access

For Pulumi CLI operations that require access to local projects and their files, mount the project directory:

{
  "mcpServers": {
    "pulumi": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "~/projects/my-pulumi-app:/app/project",
        "-e", "PULUMI_ACCESS_TOKEN=your-access-token",
        "mcp/pulumi:latest", "stdio"
      ]
    }
  }
}

Using with MCP Clients over HTTP

The Pulumi MCP server supports HTTP transport for web-based integrations. Since most MCP clients expect STDIO communication, you can use a transport bridge like supergateway to connect STDIO-based clients to HTTP servers.

Quick Start Script

Use the provided script to build and run the HTTP server:

./scripts/docker-run-http.sh

This script builds the Docker image and starts the container in HTTP mode on port 3000.

Bridge Configuration for Claude Desktop

To connect Claude Desktop (which uses STDIO) to the HTTP server, copy the following configuration:

{
  "mcpServers": {
    "pulumi": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "supercorp/supergateway",
        "--streamableHttp",
        "http://host.docker.internal:3000/mcp"
      ]
    }
  }
}

This configuration:

  • Runs the MCP bridge in a Docker container

  • Connects to your HTTP server using host.docker.internal (Docker's host machine reference)

  • Bridges STDIO ↔ HTTP communication

  • Handles session management automatically

Environment Variables

Variable

Description

Default

Required

PULUMI_ACCESS_TOKEN

Pulumi Cloud access token

""

For resource deployment & insights

Notes:

  • When mounting local directories, reference the project as /app/project in your MCP tool requests

  • Mount ~/.pulumi to preserve Pulumi CLI configuration and credentials

  • Add cloud provider credential volumes and environment variables as needed for your deployments

Development

Requirements

  • Node.js and npm

  • Pulumi CLI

Build Commands

Command

Description

make ensure

Install dependencies

make build

Build the project

make test

Run all tests

npm run build

Build using npm

npm run lint:fix

Find and fix lint errors

Quick Start

  1. Clone the repository

  2. Install dependencies: make ensure

  3. Build the project: make build

  4. Test the project: make test

How to Install Locally

For local testing using Claude Code, you can use the provided scripts:

# Build the project
npm run build

# Install the MCP server locally for testing
./scripts/install-mcp.sh

# Or install from a packed .tgz file (created with npm pack)
npm pack
./scripts/install-mcp.sh pulumi-mcp-server-0.1.2.tgz

# Remove the local installation
./scripts/uninstall-mcp.sh

The install script will remove any existing pulumi-mcp-local installation and install the current version from your local directory. Optionally, you can provide a .tgz file created with npm pack to test the packaged version. Run Claude Code and type the /mcp command to see it.

For other MCP clients like Claude Desktop or Windsurf, you can manually configure the local server:

{
  "mcpServers": {
    "pulumi-mcp-local": {
      "command": "node",
      "args": ["/path/to/your/mcp-server/dist/index.js", "stdio"]
    }
  }
}

Replace /path/to/your/mcp-server with the absolute path to your local repository directory.

List existing tools

Use MCP Inspector to list the capabilities:

# List tools and their metadata
npm run inspector -- --method tools/list

# List prompts and their metadata
npm run inspector -- --method prompts/list

Note: This MCP server is actively evolving with new features being added regularly. While we strive to maintain compatibility, some API changes may occur as we improve it. Please file an issue on GitHub if you encounter bugs or would like to request support for additional Pulumi commands.

License

This project is licensed under the Apache-2.0 License. See the LICENSE file for details.

Available Tools

5 tools
pulumi-cli-previewC

Run pulumi preview for a given project and stack

ParametersJSON Schema
NameRequiredDescriptionDefault
stackNameNoThe associated stack name. Defaults to 'dev'.
workDirYesThe working directory of the program.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'preview' but doesn't clarify that this is a read-only, non-destructive operation that simulates changes without applying them, nor does it address potential side effects like network calls, authentication needs, or output format. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action ('Run pulumi preview') and avoids redundancy, making it highly concise and well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a CLI tool for infrastructure previews, the description is incomplete. With no annotations and no output schema, it fails to explain critical aspects like the non-destructive nature of previews, authentication requirements, error handling, or what the output entails (e.g., a summary of planned changes). This makes it inadequate for safe and effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters ('stackName' and 'workDir') with their types and defaults. The description adds no additional parameter semantics beyond implying the tool uses these for the preview, so it meets the baseline of 3 without compensating for any schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Run pulumi preview') and specifies the target ('for a given project and stack'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like 'pulumi-cli-up' (which applies changes) or 'pulumi-cli-stack-output' (which retrieves outputs), leaving room for ambiguity in tool selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'pulumi-cli-up' for applying changes or 'pulumi-cli-stack-output' for viewing outputs. It lacks context on prerequisites (e.g., needing a Pulumi project setup) or typical use cases (e.g., before applying infrastructure changes), offering only a basic functional statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pulumi-cli-stack-outputC

Get the output value(s) of a given stack

ParametersJSON Schema
NameRequiredDescriptionDefault
outputNameNoThe specific stack output name to retrieve.
stackNameNoThe associated stack name. Defaults to 'dev'.
workDirYesThe working directory of the program.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves output values but fails to mention critical behaviors like whether it requires authentication, how it handles errors, if it returns structured data, or any rate limits. For a read operation with zero annotation coverage, this is a significant gap, warranting a score of 2.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It is appropriately sized and front-loaded, making it easy to understand quickly. This earns a score of 5 for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no output schema, and no annotations), the description is incomplete. It does not explain what the return values look like, how outputs are formatted, or any dependencies like stack state. For a tool that retrieves data, this lack of output information and behavioral context results in a score of 2.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, meaning all parameters are documented in the input schema. The description adds no additional meaning beyond what the schema provides, such as explaining the relationship between parameters or usage examples. According to the rules, with high schema coverage, the baseline is 3, so this scores a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'Get the output value(s) of a given stack,' which specifies the verb ('Get') and resource ('output value(s) of a given stack'). It distinguishes from siblings like 'pulumi-cli-preview' or 'pulumi-cli-up' by focusing on retrieval rather than deployment actions. However, it doesn't explicitly differentiate from other read operations like 'pulumi-registry-get-resource,' keeping it at a 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It lacks context about prerequisites, such as needing an initialized stack, or comparisons to other tools like 'pulumi-registry-get-resource' for different resource types. This absence of usage instructions results in a score of 2.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pulumi-cli-upC

Run pulumi up for a given project and stack

ParametersJSON Schema
NameRequiredDescriptionDefault
stackNameNoThe associated stack name. Defaults to 'dev'.
workDirYesThe working directory of the program.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Run pulumi up') which implies a write/mutation operation that applies infrastructure changes, but fails to mention critical traits like potential destructive effects, authentication requirements, execution time, or error handling. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with every part contributing essential information about the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a CLI tool that likely performs infrastructure deployments (a mutation operation), no annotations, no output schema, and 2 parameters, the description is incomplete. It doesn't cover what the tool returns, error conditions, side effects, or how it interacts with the Pulumi ecosystem, making it inadequate for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters ('stackName' and 'workDir') with descriptions. The tool description adds no additional meaning about parameters beyond what's in the schema, such as explaining how 'workDir' relates to the Pulumi project or default behaviors. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Run pulumi up') and specifies the target ('for a given project and stack'), which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'pulumi-cli-preview' (which likely shows changes without applying them), leaving room for improvement in sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a Pulumi project setup), contrast with 'pulumi-cli-preview' for dry runs, or specify scenarios like deploying infrastructure changes. This lack of context makes it harder for an agent to choose appropriately among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pulumi-registry-get-resourceB

Get information about a specific resource from the Pulumi Registry

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleNoThe module to query (e.g., 's3', 'ec2', 'lambda'). Optional for smaller providers, will be 'index by default.
providerYesThe cloud provider (e.g., 'aws', 'azure', 'gcp', 'random') or github.com/org/repo for Git-hosted components
resourceYesThe resource type to query (e.g., 'Bucket', 'Function', 'Instance')

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves information (implying a read-only operation) but doesn't specify what happens on errors (e.g., if the resource doesn't exist), whether authentication is required, rate limits, or the format of returned information. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action ('Get information about'), making it easy to parse. Every part of the sentence earns its place by specifying the target ('a specific resource') and source ('from the Pulumi Registry').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a resource lookup tool with no annotations and no output schema, the description is insufficient. It doesn't explain what information is returned (e.g., documentation, properties, examples), error handling, or authentication needs. For a tool that likely interacts with an external registry, more context is needed to guide effective use by an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all parameters well-documented in the schema itself (e.g., 'provider' as the cloud provider, 'resource' as the resource type). The description adds no additional parameter semantics beyond what's in the schema, such as examples of valid inputs or interdependencies between parameters. Given the high schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get information about') and resource ('a specific resource from the Pulumi Registry'), making the purpose unambiguous. It distinguishes from sibling tools like 'pulumi-registry-list-resources' by specifying retrieval of a single resource rather than listing. However, it doesn't explicitly mention what type of information is retrieved (e.g., documentation, schema, metadata), which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing information about a specific Pulumi resource, but provides no explicit guidance on when to use this tool versus alternatives like 'pulumi-registry-list-resources' or the CLI tools. There's no mention of prerequisites, error conditions, or typical use cases, leaving the agent to infer context from the tool name and parameters alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pulumi-registry-list-resourcesB

List all resource types for a given provider and module

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleNoOptional module to filter by (e.g., 's3', 'ec2', 'lambda')
providerYesThe cloud provider (e.g., 'aws', 'azure', 'gcp', 'random') or github.com/org/repo for Git-hosted components

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists resources but lacks details on permissions, rate limits, pagination, or output format. For a read operation without annotations, this is insufficient to inform the agent about how the tool behaves beyond its basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly. This exemplifies optimal conciseness for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 parameters, no output schema, no annotations), the description adequately covers the basic purpose. However, it lacks details on output format, error handling, or usage context, which could be helpful for an agent. It meets minimum viability but has clear gaps in completeness for operational use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting both parameters. The description adds minimal value by mentioning 'provider and module' but doesn't elaborate on semantics beyond what the schema provides. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't significantly enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and target ('all resource types'), specifying the scope ('for a given provider and module'). It distinguishes from sibling tools like 'pulumi-registry-get-resource' by focusing on listing rather than retrieving details, but doesn't explicitly contrast with other siblings like CLI tools. This makes it clear but not fully differentiated from all alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention scenarios for listing resources, prerequisites, or exclusions, and offers no comparison with sibling tools like 'pulumi-cli-preview' or 'pulumi-registry-get-resource'. This leaves the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • First observedpulumi-cli-preview
    • First observedpulumi-cli-stack-output
    • First observedpulumi-cli-up
    • First observedpulumi-registry-get-resource
    • First observedpulumi-registry-list-resources

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no ambiguity: pulumi-cli-preview, pulumi-cli-up, and pulumi-cli-stack-output handle different CLI operations for project/stack management, while pulumi-registry-get-resource and pulumi-registry-list-resources focus on distinct registry lookup tasks. The descriptions reinforce these boundaries, making misselection unlikely.

Naming Consistency5/5

All tool names follow a consistent pattern: they start with 'pulumi-' followed by a hyphen-separated domain (cli or registry) and a specific action (e.g., preview, up, get-resource). This predictable structure enhances readability and agent usability without any deviations or mixed conventions.

Tool Count4/5

With 5 tools, the count is reasonable and well-scoped for a Pulumi MCP server, covering core CLI operations and registry lookups. It's slightly lean but not insufficient, as each tool earns its place; minor additions like stack management or config tools could enhance it, but it's not a significant gap.

Completeness4/5

The tool set covers key Pulumi workflows: preview, up, and stack outputs for deployment, plus registry resource lookups. Minor gaps exist, such as missing tools for stack management (e.g., create/delete) or config operations, but agents can likely work around these with the provided tools for basic infrastructure-as-code tasks.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/pulumi/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server