Skip to content

Conversation

Novaes
Copy link
Collaborator

@Novaes Novaes commented Aug 11, 2025

Add domains

GitHub issue number

#386

Associated Risks

Replace by possible risks this pull request can bring you might have thought of

PR Checklist

  • I have read the contribution guidelines
  • I have read the code of conduct guidelines
  • Title of the pull request is clear and informative.
  • 👌 Code hygiene
  • 🔭 Telemetry added, updated, or N/A -- N/A: tracking domain enabling will be a follow up
  • 📄 Documentation added, updated, or N/A -- N/A: we aligned PM handling it
  • 🛡️ Automated tests added, or N/A

🧪 How did you test it?

Unit test added
Local run - Inspector
Post-Update Status:

  • Wiki + Work Items
    Tools loaded reduced from all tools to 18 tools
image

Repositories + Test Plans
Tools loaded reduced from all tools to 23 tools
image

VS Code
image

Note on UI: Domain selection is not supported in the UI, and VS Code lacks multi-select for pickString.
Domains are required explicitly; documentation are available to assist.. Workarounds exist but are not prioritized. This UI limitation should be addressed with Groups and Tags coming.

image

Customer Experience

Given We are considering pushing a draft spec generator, the page for customers would look like:

Context

SEP-993 is moving to Groups and Tags
We have been discussing with interested parties and authors, Groups is quite loosely coupled, which can be categorized with:

  • Semantic Groups
  • Functional Groups

It makes sense for Groups and Tags proposal be as generic as possible. With domains we introduce a semantic group which in terms of implementation is just syntax sugar for groups, but it carries more governance on MCP servers around those.

Some open questions when Groups go to prod:

  • Some other edge case behaviors: e.g. behavior for someone defining domains and groups
  • Standard way to expose and catalog those domains (give viz at Microsoft for them)

Important

  • Not all MCP servers necessarily require to have domains. For instance, if your groups are organized around functional roles rather than strict semantic boundaries, it may be reasonable not to enforce domain governance.
  • For those servers that do require domain structuring, this capability is supported through the Groups and Tags SEP. Domains are syntax sugar for groups, which appear to be the de-facto implementation approach at the protocol level.

More info on protocol alignment: Tool Filtering with groups and Tags

More info: SEP-1300: Tool Filtering with Groups and Tags · Issue #1300 · modelcontextprotocol/modelcontextprotocol

Client-side filtering of tools: Agent fetches all the tools with no filtering, organizes them by groups and tags within the host application, then provides the appropriate tools to the LLM when needed via whatever means, e.g., semantic search.

Server-side filtering of tools: Agent presents a list of groups to the LLM. When the LLM decides it needs a tool but doesn't have an appropriate one in its context, it may request the list of tools in a particular group or set of groups.

@Novaes Novaes changed the title Add domains Add server "domains" feature Aug 11, 2025
@Novaes Novaes changed the title Add server "domains" feature feat: add server "domains" Aug 11, 2025
Copy link

github-actions bot commented Aug 14, 2025

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
npm/brace-expansion 1.1.12 🟢 4.8
Details
CheckScoreReason
Code-Review🟢 3Found 9/28 approved changesets -- score normalized to 3
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 73 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 7
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration
Signed-Releases⚠️ -1no releases found
Security-Policy⚠️ 0security policy file not detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
Vulnerabilities🟢 82 existing vulnerabilities detected

Scanned Files

  • package-lock.json

@danhellem danhellem linked an issue Aug 14, 2025 that may be closed by this pull request
@Novaes Novaes marked this pull request as ready for review August 14, 2025 12:20
@Novaes Novaes requested a review from a team as a code owner August 14, 2025 12:20
@Novaes Novaes changed the title feat: add server "domains" Add server "domains" Aug 14, 2025
@Novaes Novaes changed the title Add server "domains" Add MCP server "domains" Aug 14, 2025
@Novaes Novaes marked this pull request as draft August 14, 2025 14:09
@Novaes Novaes changed the title Add MCP server "domains" feat: add MCP server "domains" Aug 17, 2025
@Novaes Novaes marked this pull request as ready for review August 18, 2025 01:20
@Novaes Novaes self-assigned this Aug 22, 2025
Renamed for testing purpose
@Novaes Novaes requested a review from aaudzei August 22, 2025 03:58
Novaes added 4 commits August 25, 2025 02:10
For VS Code input, there is no pickString support for multiple selections (e.g. pickManyString or manyOf argument).
Two seeing approaches are (1) pass multi-arg as single arg string and rely on parsing the string input with custom code; (2) create a script to load multi-arg UI.

It seems more appropriate though we leave to argumetn parsing, as array of string, and rely on adding domains on file (no UI for it)

Example if want to add single domain - pickString:
 {
      "id": "domains",
      "type": "pickString",
      "options": [
        "advanced-security",
        "builds",
        "core",
        "releases",
        "repositories",
        "search",
        "test-plans",
        "wiki",
        "work",
        "work-items"
      ]
    }
@Novaes Novaes enabled auto-merge (squash) August 25, 2025 00:37
@Novaes Novaes requested a review from a team August 25, 2025 12:53
@Novaes Novaes disabled auto-merge August 25, 2025 13:08
src/index.ts Outdated
@@ -72,6 +86,13 @@ function getAzureDevOpsClient(userAgentComposer: UserAgentComposer): () => Promi
}

async function main() {
console.log("Starting Azure DevOps MCP Server...");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude MCP client is strict. logging to STDOUT is not an option. Please remove everywhere

Copy link
Collaborator Author

@Novaes Novaes Aug 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Applied at 4be8e63 and ea58092

Copy link
Collaborator Author

@Novaes Novaes Aug 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At some point, we should implement persistent logging. Logs are essential for tracing errors and evaluating application security by analyzing flow execution. These logs can be stored in a file for proper retention and review.

@Novaes Novaes requested a review from aaudzei August 25, 2025 14:28
@Novaes Novaes requested a review from a team August 25, 2025 15:25
@Novaes Novaes merged commit fdeefe0 into main Aug 25, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Introducing: Domains
2 participants