Skip to main content

MCP server that surfaces Azure DevOps work-item activity for a configured team roster, so VS Code Copilot Chat can answer manager-style questions like 'what did Ashish work on last week?' or 'analyze the team's last 6 months'.

Project description

ado-team-activity-mcp

A local Model Context Protocol (MCP) server that lets you ask GitHub Copilot Chat in VS Code manager-style questions about Azure DevOps work-item activity for your team:

"What did Ashish work on yesterday?" "Summarize Priya's last 7 days." "Give me a team standup for the last 3 days." "Analyze Abhishek's last 6 months."

The server resolves the teammate name against a config roster you provide, runs WIQL queries against Azure DevOps, and returns structured work-item data (including comments). Copilot Chat's model produces the natural-language summary.

Read-only by design — no work-item creation, edits, or comments are ever made.


Architecture

Copilot Chat  ──(MCP tool call)──►  ado-team-activity-mcp (Python, stdio)
                                          │
                                          ▼
                              Azure DevOps REST (WIQL + Work Items + Comments)
                                          ▲
                                          │
                              DefaultAzureCredential (az login)

Tools exposed

Tool Purpose
list_team_members() Return the configured roster (for name disambiguation).
get_teammate_activity(name, days=?, include_comments=True) All work-item activity for one teammate over the window. Comments included by default.
get_team_activity(days=?, include_comments=True) Same, looped over the whole roster, in one round-trip.
summarize_contributions(name, days=180, ...) Aggregated stats for long windows: by-month, gaps, ownership (User Stories / Bugs), active items, cadence. Use this for perf-review / trend / quarter / "last N months" questions.
get_work_item(id) Drill into a specific item (fields + last 10 revisions + comments).
get_work_item_comments(id) Comments-only fetch.

Each item in activity responses carries an activity_reasons list — any of assigned_and_changed, changed_by, created_by, closed_by — so the chat model can group its summary cleanly.


Install (recommended path — for end users)

You need Python 3.11+, Azure CLI, and VS Code with GitHub Copilot Chat.

1. Install the server

pipx is the cleanest option (isolated venv, exposes the command globally):

pipx install ado-team-activity-mcp

If you don't have pipx:

python -m pip install --user pipx
python -m pipx ensurepath
# restart your shell, then:
pipx install ado-team-activity-mcp

2. Sign in to Azure DevOps

az login

If your ADO org lives in a non-default tenant, pass it explicitly:

az login --tenant <tenant-id>

3. Create your config

Save this as config.yaml somewhere stable (e.g. C:\Users\<you>\.ado-team-activity\config.yaml):

organization_url: https://dev.azure.com/your-org
project: YourProject
default_lookback_days: 1
team:
  - alias: ashish
    display_name: Ashish Kumar
    unique_name: ashish@contoso.com
  - alias: priya
    display_name: Priya Sharma
    unique_name: priya@contoso.com

How to find the values:

  • organization_url — the root of your ADO URL: https://dev.azure.com/<org> (no trailing slash, no project segment).
  • project — the project name (case-sensitive), the segment right after the org in the URL.
  • unique_name — the user's ADO sign-in (UPN). Easiest way: open any work item assigned to that teammate, click the Assignee chip, and copy the email shown under their name.
  • alias — short handle you'll type in Copilot Chat. Must be unique.

Do NOT commit config.yaml to source control if it contains internal info. The roster is per-manager.

4. Register the server with VS Code

Open VS Code's user MCP configuration:

  • Command Palette"MCP: Open User Configuration"

Add this entry under servers:

{
  "servers": {
    "ado-team-activity": {
      "type": "stdio",
      "command": "ado-team-activity-mcp",
      "env": {
        "ADO_ACTIVITY_CONFIG": "C:/Users/<you>/.ado-team-activity/config.yaml"
      }
    }
  }
}

Replace the ADO_ACTIVITY_CONFIG path with wherever you saved your config.yaml. Use forward slashes on Windows.

5. Reload the VS Code window

Then open Copilot Chat in Agent mode and try the prompts below.


Example prompts

Day-to-day:

  • What did Ashish work on yesterday?
  • Anything blocked on the team in the last 3 days?
  • Give me a standup for the team for today.
  • Tell me more about work item 12345.
  • What's the discussion on 1738?

Performance / trend:

  • Analyze Vibhuti's last 6 months.
  • Compare Ashish, Vibhuti, and Abhishek over the last quarter.
  • Is Abhishek still active in this project?

Troubleshooting

Symptom Fix
ado-team-activity-mcp: command not found Run pipx ensurepath, restart shell. Or use the absolute path printed by pipx install.
Config file not found at '...' Set ADO_ACTIVITY_CONFIG to an absolute path in your mcp.json. Use forward slashes.
DefaultAzureCredential failed to retrieve a token Run az login (with --tenant if needed) and retry.
Zero items returned for someone you know is active unique_name doesn't match ADO's UPN. Confirm by opening a work item assigned to them and copying the email from the Assignee chip exactly.
Roster resolves the wrong person Add a unique alias for the ambiguous teammate and use it in chat.
Tool not visible in Copilot Chat Reload the VS Code window after editing the user-level MCP config.

Develop locally (contributors)

git clone <repo-url>
cd ado-team-activity-mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
Copy-Item config.example.yaml config.yaml   # then fill in
az login
python scripts\check_auth.py                # should print "All checks passed."
pytest                                       # roster unit tests

The workspace's .vscode/mcp.json is already wired for development — it runs the server out of the local .venv using python -m ado_activity_mcp. Reload VS Code after the install and you're ready.

Publish a new version (maintainer)

# bump version in pyproject.toml first
pip install --upgrade build twine
python -m build
twine upload dist/*

You'll need a PyPI account and an API token saved in ~/.pypirc.


Privacy & security

  • Read-only — the server calls only query_by_wiql, get_work_items, get_work_item, get_revisions, get_comments, and get_projects. No create/update/delete endpoints anywhere in the code.
  • No telemetry — nothing is sent anywhere except Azure DevOps (and Entra ID for the token).
  • Credentials never touch the config file — auth is DefaultAzureCredential. Your token lives only in memory and is refreshed via your existing az login session.
  • Roster is local to you — every manager maintains their own config.yaml.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ado_team_activity_mcp-0.1.0.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ado_team_activity_mcp-0.1.0-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file ado_team_activity_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: ado_team_activity_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for ado_team_activity_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 86a3b35f1ffa379ca55acf3ece9ff1e7b2ac833902dda4c92cfb4de39f109017
MD5 574250c553d6ea70bc217ebb0166f472
BLAKE2b-256 116a8a6ef1a5bb87e39d6367b4244bded9d70f9138c99d459da641d72924defc

See more details on using hashes here.

File details

Details for the file ado_team_activity_mcp-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ado_team_activity_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ad8a8113f9e1903ffcd24dd40f08f3f4b3e8094e7f4c3111bd088f507099741
MD5 cb6327e8a26937b66ba0b57ecabb6b4f
BLAKE2b-256 24ae80bfd797231cad002df3343d6a35ca8832f6bb8fae72afefc4f5a857d18c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page