daxian-dbw/MCPServerPS
If you are the rightful owner of MCPServerPS and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
This project creates a PowerShell module that serves as a Model Context Protocol (MCP) server, enabling dynamic exposure of tools based on invocation parameters.
MCPServerPS
This project creates a PowerShell module that serves as a Model Context Protocol (MCP) server.
The module exposes the Start-MyMCP cmdlet, which starts the MCP server and dynamically exposes tools based on how it is invoked.
MCP server as a PowerShell Module
Benefits of shipping an MCP server as a PowerShell module:
- Small size: 3.35 MB. Only the .NET MCP SDK assemblies are required.
- Availability: easy to distribute and install via PowerShell Gallery across platforms.
- Flexible: expose C# tools,
.ps1script tools, or module function tools. - For an MCP server that needs PowerShell features, the runtime is naturally available (runs in
pwsh.exe), so no need to ship PowerShell SDK assemblies.
Building the Module
To build the project, run:
dotnet publish .\MCPServerPS.csproj
The published module will be available at .\out\MCPServerPS.
After deploying the module to your PowerShell module path, you can start the MCP server using the Start-MyMCP cmdlet.
Start-MyMCP Cmdlet Parameter Sets
The Start-MyMCP cmdlet supports three parameter sets:
Start-MyMCP [<CommonParameters>]
Start-MyMCP -ScriptRoot <string> [<CommonParameters>]
Start-MyMCP -Module <string> [<CommonParameters>]
- Default:
Start-MyMCPexposes all MCP tools defined in the C# code of this assembly. - ScriptRoot:
Start-MyMCP -ScriptRoot <path-to-directory>exposes each.ps1script file in the specified directory as an MCP tool. - Module:
Start-MyMCP -Module <module-name-or-path-to-module>exposes each function within the specified module as an MCP tool.
Examples of script tools and module function tools can be found in the ./scripts folder.
Both script tools and module function tools use comment-based help to define the description and parameters for each tool. This ensures that tool metadata is discoverable and user-friendly.
Runspace Behavior
- Each script tool runs in its own dedicated Runspace, so they are isolated from each other.
- Module function tools share the same Runspace for the module, allowing changes to module state made by one function tool to be visible to others. This is because module functions are considered related and may need to share state.
Using MCPServerPS in VSCode
1. Exposing C# MCP Tools
{
"servers": {
"MCPServerPS": {
"type": "stdio",
"command": "pwsh",
"args": [
"-noprofile",
"-c",
"MCPServerPS\\Start-MyMCP"
]
}
},
"inputs": []
}
2. Exposing PowerShell Script Tools
Assume the local repo root is at E:\repos\MCPServerPS.
{
"servers": {
"MCPServerPS": {
"type": "stdio",
"command": "pwsh",
"args": [
"-noprofile",
"-c",
"MCPServerPS\\Start-MyMCP -ScriptRoot E:\\repos\\MCPServerPS\\scripts"
]
}
},
"inputs": []
}
3. Exposing Module Function Tools
Assume the local repo root is at E:\repos\MCPServerPS.
{
"servers": {
"MCPServerPS": {
"type": "stdio",
"command": "pwsh",
"args": [
"-noprofile",
"-c",
"MCPServerPS\\Start-MyMCP -Module E:\\repos\\MCPServerPS\\scripts\\tools.psm1"
]
}
},
"inputs": []
}
Installing latest version from main
Prerequisites
- The
PSResourceGetmodule is installed. - A
SecretVaultis created calleddefault.
Instructions
Setup a PAT to read the feed.
Create a Personal Access Token (Classic) with package:read permission.
At the time of writing, this is the only type of token that allows these premissions.
## The command should prompt for the secret.
Set-Secret -Name GitHubPackageRead
Register the Repository.
This assumes you called you vault default as described in the prerequisites.
Register-PSResourceRepository `
-name daxian-dbw `
-uri https://nuget.pkg.github.com/daxian-dbw/index.json `
-ApiVersion V3 `
-CredentialInfo @{ VaultName='default'; SecretName='GitHubPackageRead' } `
-Trusted
Then, you can install the module:
Install-PSResource -Name MCPServerPS -Repository daxian-dbw