MCP server for on-prem TFS / Azure DevOps Server instances that require NTLM authentication.
This server uses the official MCP TypeScript SDK over stdio and shells out to curl --ntlm for REST calls. It is aimed at environments like the one validated here:
- Azure DevOps Server / TFS on-prem
- collection-based URLs such as
http://host/DefaultCollection - Windows-domain credentials
- REST API version
5.1
- List projects
- List repositories in a project
- List branches in a repository
- List recently changed work items
- List available work item types
- Inspect field definitions for a work item type
- Run custom WIQL queries
- Create generic work items from field reference names
- Create backlog items with required custom fields
- Node.js
20+ curlavailable onPATH- TFS / Azure DevOps Server reachable from the host machine
npm installPackage tarball:
npm packRequired:
export AZURE_DEVOPS_ORG_URL="http://your-tfs-host"
export AZURE_DEVOPS_COLLECTION="DefaultCollection"
export AZURE_DEVOPS_USERNAME="domain_user"
export AZURE_DEVOPS_PASSWORD="your-password"Optional:
export AZURE_DEVOPS_PROJECT="Your Default Project"
export AZURE_DEVOPS_API_VERSION="5.1"npm startBuild the image:
docker build -t tfs-onprem-mcp .Run it with your TFS connection settings:
docker run --rm -i \
-e AZURE_DEVOPS_ORG_URL="http://your-tfs-host" \
-e AZURE_DEVOPS_COLLECTION="DefaultCollection" \
-e AZURE_DEVOPS_USERNAME="domain_user" \
-e AZURE_DEVOPS_PASSWORD="your-password" \
-e AZURE_DEVOPS_PROJECT="体检新产品" \
-e AZURE_DEVOPS_API_VERSION="5.1" \
tfs-onprem-mcpIf your MCP client supports Docker-based stdio servers, point it at the image and pass the same environment variables there.
Example client config for a stdio MCP client:
{
"mcpServers": {
"tfs-onprem": {
"command": "node",
"args": ["/absolute/path/to/tfs-onprem-mcp/src/index.js"],
"env": {
"AZURE_DEVOPS_ORG_URL": "http://your-tfs-host",
"AZURE_DEVOPS_COLLECTION": "DefaultCollection",
"AZURE_DEVOPS_USERNAME": "domain_user",
"AZURE_DEVOPS_PASSWORD": "your-password",
"AZURE_DEVOPS_PROJECT": "体检新产品",
"AZURE_DEVOPS_API_VERSION": "5.1"
}
}
}
}If you publish this package to npm, you can switch to:
{
"mcpServers": {
"tfs-onprem": {
"command": "npx",
"args": ["-y", "@cybercdc/tfs-onprem-mcp"],
"env": {
"AZURE_DEVOPS_ORG_URL": "http://your-tfs-host",
"AZURE_DEVOPS_COLLECTION": "DefaultCollection",
"AZURE_DEVOPS_USERNAME": "domain_user",
"AZURE_DEVOPS_PASSWORD": "your-password",
"AZURE_DEVOPS_PROJECT": "体检新产品"
}
}
}
}server_infolist_projectslist_repositorieslist_brancheslist_recent_work_itemslist_work_item_typesget_work_item_type_fieldsquery_work_itemscreate_work_itemcreate_backlog_item
For a new TFS project, the safest flow is:
- Call
list_work_item_types - Pick a work item type such as
Bug,任务, or产品积压工作(backlog)项 - Call
get_work_item_type_fields - Use the required field reference names to call
create_work_item
This avoids hardcoding one project's process template into the MCP client workflow.
create_backlog_item is still included as a convenience wrapper for the validated environment behind this package. It assumes a customized backlog template with these required logical fields:
acceptanceCriteriastoryTyperelatedProjectproductCategoryexpectedReleaseDate
If your server uses different custom field reference names, prefer create_work_item instead of editing the package.
- Confirm the scoped package name in
package.jsonis correct for your npm account or org. - Update the GitHub URLs in
package.jsonif your repository owner or organization differs. - Bump
version. - Log in:
npm login- Publish:
npm publish --access public- Push the current version tag:
git tag v0.1.0
git push origin v0.1.0- Create a GitHub release from that tag.
- Attach the
npm packtarball if you want a downloadable artifact on the release page. - Use release notes that mention:
- NTLM-authenticated TFS / Azure DevOps Server support
- validated REST API version
5.1 - generic work item creation plus backlog convenience wrapper
- MCP TypeScript SDK README: https://github.com/modelcontextprotocol/typescript-sdk
- MCP documentation: https://modelcontextprotocol.io