@pulumi/mcp-server
Official풀루미 MCP 서버
참고: 이 MCP 서버는 현재 활발하게 개발 중입니다. API(사용 가능한 명령 및 인수 포함)는 실험 단계이므로 예고 없이 호환성 문제가 발생할 수 있습니다. 버그가 발생하거나 추가 Pulumi 명령에 대한 지원이 필요한 경우 GitHub 에 문제를 제기해 주세요.
Pulumi Automation API와 Pulumi Cloud API를 사용하여 Pulumi CLI와 상호 작용하기 위한 MCP( Model Context Protocol )를 구현하는 서버입니다.
이 패키지를 사용하면 MCP 클라이언트가 Pulumi CLI를 클라이언트 환경에 직접 설치하지 않고도 패키지 정보 검색, 변경 사항 미리 보기, 업데이트 배포, 스택 출력 검색과 같은 Pulumi 작업을 프로그래밍 방식으로 수행할 수 있습니다.
용법
Pulumi CLI를 컴퓨터에 설치해야 합니다.
이 패키지는 주로 MCP 서버를 AI 도구로 사용할 수 있는 애플리케이션에 통합되도록 설계되었습니다. 예를 들어, Claude 데스크톱의 MCP 구성 파일에 Pulumi MCP 서버를 포함하는 방법은 다음과 같습니다.
지엑스피1
또는 stdio 대신 SSE(Server-Sent Events)를 사용한 HTTP를 선호하는 경우:
{
"mcpServers": {
"pulumi": {
"command": "npx",
"args": ["@pulumi/mcp-server@latest","sse"]
}
}
}Related MCP server: mcp-perplexity
도커 컨테이너
Pulumi MCP 서버를 Docker 컨테이너로 실행할 수도 있습니다. 이 방법을 사용하면 Node.js와 패키지 종속성을 호스트 머신에 직접 설치할 필요가 없습니다.
컨테이너 만들기
컨테이너를 만들려면:
docker build -t pulumi/mcp-server:latest .MCP 클라이언트와 함께 사용
MCP 클라이언트에서 컨테이너화된 서버를 사용하려면 Docker 컨테이너를 사용하도록 클라이언트를 구성해야 합니다. 예를 들어 Claude 데스크톱의 MCP 구성은 다음과 같습니다.
{
"mcpServers": {
"pulumi": {
"command": "docker",
"args": ["run", "-i", "--rm", "pulumi/mcp-server:latest", "stdio"]
}
}
}HTTP(SSE)를 통한 MCP 클라이언트 사용
HTTP(SSE)를 통해 MCP 클라이언트와 함께 컨테이너화된 서버를 사용하려면 다음 명령을 사용하여 컨테이너를 실행할 수 있습니다.
{
"mcpServers": {
"pulumi": {
"command": "docker",
"args": ["run", "-i", "--rm", "-p", "3000:3000", "pulumi/mcp-server:latest", "sse"]
}
}
}로컬 Pulumi 프로젝트에 액세스해야 하는 Pulumi 작업의 경우, 적절한 디렉터리를 마운트해야 합니다. 예를 들어, Pulumi 프로젝트가 ~/projects/my-pulumi-app 에 있는 경우:
{
"mcpServers": {
"pulumi": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "~/projects/my-pulumi-app:/app/project", "pulumi/mcp-server:latest"]
}
}
}그런 다음 MCP 도구를 사용할 때 요청에서 프로젝트 디렉토리를 /app/project 로 참조합니다.
사용 가능한 명령
서버는 MCP 요청을 통해 호출 가능한 다음 Pulumi 작업에 대한 핸들러를 제공합니다.
preview: 지정된 스택에서pulumi preview실행합니다.workDir(문자열, 필수):Pulumi.yaml프로젝트 파일이 포함된 작업 디렉토리입니다.stackName(문자열, 선택 사항): 작업할 스택 이름(기본값은 'dev')
up: 지정된 스택에 대한 변경 사항을 배포하기 위해pulumi up실행합니다.workDir(문자열, 필수):Pulumi.yaml프로젝트 파일이 포함된 작업 디렉토리입니다.stackName(문자열, 선택 사항): 작업할 스택 이름(기본값은 'dev')
stack-output: 배포가 성공적으로 완료된 후 지정된 스택에서 출력을 검색합니다.workDir(문자열, 필수):Pulumi.yaml프로젝트 파일이 포함된 작업 디렉토리입니다.stackName(문자열, 선택 사항): 출력을 검색할 스택 이름(기본값은 'dev')outputName(문자열, 선택 사항): 검색할 특정 스택 출력 이름입니다. 생략하면 스택의 모든 출력이 반환됩니다.
get-resource: 입력 및 출력을 포함하여 특정 Pulumi Registry 리소스에 대한 정보를 반환합니다.provider(문자열, 필수): 클라우드 공급자(예: 'aws', 'azure', 'gcp', 'random') 또는 Git 호스팅 구성 요소의 경우github.com/org/repo.module(문자열, 선택 사항): 쿼리할 모듈(예: 's3', 'ec2', 'lambda').resource(문자열, 필수): 리소스 유형 이름(예: '버킷', '함수', '인스턴스').
list-resources: Pulumi 공급자 패키지 내에서 사용 가능한 리소스를 나열하며, 선택적으로 모듈별로 필터링합니다.provider(문자열, 필수): 클라우드 공급자(예: 'aws', 'azure', 'gcp', 'random') 또는 Git 호스팅 구성 요소의 경우github.com/org/repo.module(문자열, 선택 사항): 필터링할 모듈(예: 's3', 'ec2', 'lambda').
개발
저장소를 복제합니다.
종속성 설치:
make ensure프로젝트 빌드:
make build프로젝트 테스트:
make test
특허
이 프로젝트는 Apache-2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
Available Tools
5 toolspulumi-cli-previewC
Run pulumi preview for a given project and stack
| Name | Required | Description | Default |
|---|---|---|---|
| stackName | No | The associated stack name. Defaults to 'dev'. | |
| workDir | Yes | The working directory of the program. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| outputName | No | The specific stack output name to retrieve. | |
| stackName | No | The associated stack name. Defaults to 'dev'. | |
| workDir | Yes | The working directory of the program. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| stackName | No | The associated stack name. Defaults to 'dev'. | |
| workDir | Yes | The working directory of the program. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| module | No | The module to query (e.g., 's3', 'ec2', 'lambda'). Optional for smaller providers, will be 'index by default. | |
| provider | Yes | The cloud provider (e.g., 'aws', 'azure', 'gcp', 'random') or github.com/org/repo for Git-hosted components | |
| resource | Yes | The resource type to query (e.g., 'Bucket', 'Function', 'Instance') |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| module | No | Optional module to filter by (e.g., 's3', 'ec2', 'lambda') | |
| provider | Yes | The cloud provider (e.g., 'aws', 'azure', 'gcp', 'random') or github.com/org/repo for Git-hosted components |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.0- First observed
pulumi-cli-preview - First observed
pulumi-cli-stack-output - First observed
pulumi-cli-up - First observed
pulumi-registry-get-resource - First observed
pulumi-registry-list-resources
TDQS
Scored across 5 tools
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.
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.
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.
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.
Related MCP Connectors
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
The official MCP Server for the Mux API
Related MCP Servers
- AlicenseCqualityDmaintenanceEasily find MCP servers using our MCP registry. Search with natural language.16MIT
- MIT
- MIT
- AlicenseNot gradedqualityAmaintenanceOfficial MCP server for configuring Litmus instances.12MIT