Service Atlas MCP Server
OfficialThe Service Atlas MCP Server provides read-only tools for exploring and analyzing teams, services, technical debt, releases, and dependencies within a Service Atlas API.
Get All Teams: List all teams registered in the Service Atlas (
get_all_teams)List Services by Team: Get all services belonging to a specific team by team ID (
get_services_by_team)Search Services by Name: Find services by searching with a name query (
find_service_by_name)Find Team Ownership: Discover which teams own a specific service by service ID (
get_teams_by_service)Tech Debt Report: Get a system-wide report of all services with open tech debts and their debt counts (
get_debt)Service-Level Debt: Retrieve the specific tech debts associated with a single service (
get_debts_for_service)Releases in Date Range: List all releases between two dates (start inclusive, end exclusive) (
get_releases)Service Dependencies: Explore what other services a given service depends on (
serviceatlas://services/{service_id}/dependencies)Service Dependents: Discover which services depend on a given service (
serviceatlas://services/{service_id}/dependents)Service Risk Report: Get a heuristic risk report including a change risk score (0–100) and health metrics such as dependency count and tech debt breakdown (
serviceatlas://services/{service_id}/risk)
All operations are read-only, ensuring no modifications to the underlying Service Atlas data.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Service Atlas MCP Serverfind which team owns the payment service"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Service Atlas MCP Server
Purpose
This MCP server exposes tools and resources for exploring a Service Atlas API: browsing teams, listing services for a team, searching services by name, seeing which teams own a service, and exploring service dependencies, tech debt, and releases.
Related MCP server: procurement-graph
Capabilities
Prompts that guide the AI on how to complete common tasks using the tools/resources
get_servicesget_all_teamsget_services_by_teamfind_service_by_namefind_which_team_owns_a_serviceget_debtget_releasesget_service_dependencies_and_dependentsget_service_riskanalyze_service_risk_and_impact
Tools
get_services(page)→ GET/services(25 items per page)get_all_teams()→ GET/teams(auto-paginates up to 200 results)get_services_by_team(team_id)→ GET/teams/{team_id}/servicesfind_service_by_name(query)→ GET/services/search?query={query}get_teams_by_service(service_id)→ GET/services/{service_id}/teamsget_debt()→ GET/reports/services/debtget_debts_for_service(service_id)→ GET/services/{service_id}/debtcreate_debt(service_id, title, description, debt_type)→ POST/services/{service_id}/debtget_releases(start, end)→ GET/releases/{start}/{end}get_service_dependencies(service_id)→ GET/services/{service_id}/dependenciesget_service_dependents(service_id)→ GET/services/{service_id}/dependentscreate_dependency(service_id, dependency_id, version)→ POST/services/{service_id}/dependencyget_service_risk(service_id)→ GET/reports/services/{service_id}/riskget_service_types()→ GET/services/typescreate_service(name, description, service_type, url, tier)→ POST/servicesupdate_service(service_id, name, description, service_type, url, tier)→ PUT/services/{service_id}remove_dependency()→ Instructs user to use web interfaceget_version()→ Returns the MCP server versionget_website()→ Retrieves the Service Atlas website URL
Resources (MCP resources namespace)
serviceatlas://teams→ All teamsserviceatlas://services?page={page}→ Paginated servicesserviceatlas://teams/{team_id}/services→ Services by teamserviceatlas://services/search/{query}→ Search services by nameserviceatlas://services/{service_id}/teams→ Teams by serviceserviceatlas://debts→ Debt reportserviceatlas://debts/{service_id}→ Debts by serviceserviceatlas://releases/{start}/{end}→ Releases in date rangeserviceatlas://services/{service_id}/dependencies→ Service dependenciesserviceatlas://services/{service_id}/dependents→ Service dependentsserviceatlas://services/{service_id}/risk→ Service risk reportserviceatlas://services/types→ Service types
Resource Scheme
Resources use the serviceatlas:// scheme so that requests are routed specifically to this server.
Use Cases
Each use case is implemented with a prompt, a tool, and an equivalent resource.
List all services (paginated) → tool
get_servicesor resourceserviceatlas://services?page={page}List all teams → tool
get_all_teamsor resourceserviceatlas://teamsList all services that belong to a team → tool
get_services_by_teamor resourceserviceatlas://teams/{team_id}/servicesFind a service by name → tool
find_service_by_nameor resourceserviceatlas://services/search/{query}Find which team owns a service → tool
get_teams_by_serviceor resourceserviceatlas://services/{service_id}/teamsGet tech debt report → tool
get_debtor resourceserviceatlas://debtsGet tech debt for a service → tool
get_debts_for_serviceor resourceserviceatlas://debts/{service_id}Create tech debt → tool
create_debtGet releases in a date range → tool
get_releasesor resourceserviceatlas://releases/{start}/{end}Get service dependencies → tool
get_service_dependenciesor resourceserviceatlas://services/{service_id}/dependenciesGet service dependents → tool
get_service_dependentsor resourceserviceatlas://services/{service_id}/dependentsCreate a service dependency → tool
create_dependencyRemove a service dependency → tool
remove_dependencyGet service risk report → tool
get_service_riskor resourceserviceatlas://services/{service_id}/risk. This report is used to answer the question: "If this service changes or fails, how broadly could that impact the system?" It provides a heuristic score based on the service's position in the dependency graph.List service types → tool
get_service_typesor resourceserviceatlas://services/typesCreate a new service → tool
create_serviceUpdate an existing service → tool
update_serviceGet MCP version → tool
get_versionGet website URL → tool
get_website
Running and Testing Locally
Use the Model Context Protocol Inspector to connect and test this MCP server.
Prereqs: Node.js installed.
Start the Inspector from the project root:
npx @modelcontextprotocol/inspectorIn the Inspector UI, add a new Server with:
Command:
uvArgs:
run src/mcp_server.pyEnvironment:
API_URL→ base URL of your Service Atlas API (e.g.http://localhost:8080)
Connect to the server from the Inspector and try the tools/resources listed above.
If you run a local Service Atlas API for testing, make sure it’s reachable at the URL you put into API_URL.
References
Available Tools
7 toolsfind_service_by_nameFind Service by NameCRead-only
Search for a service by name :param query: the name to search against :return: a list of services objects
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds that it 'returns a list of services objects', which gives basic behavioral context about the return format. However, it doesn't disclose important traits like whether the search is exact or partial, case-sensitive, or if there are rate limits or authentication requirements beyond what annotations imply.
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 brief and front-loaded with the core purpose. The param and return annotations are structured but could be more integrated. No wasted sentences, though it could be slightly more polished (e.g., combining the lines into a cohesive paragraph).
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 0% schema coverage, no output schema, and annotations only covering read-only status, the description is incomplete. It lacks details on search behavior, result format (beyond 'list of services objects'), error conditions, and how it differs from siblings. For a search tool with undocumented parameters, more context is needed.
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 0%, so the schema provides no parameter documentation. The description adds minimal semantics: ':param query: the name to search against' explains what the parameter represents, but doesn't clarify search behavior (e.g., exact match, substring), format expectations, or examples. This partially compensates but leaves significant 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 tool's purpose: 'Search for a service by name' - a specific verb ('Search') and resource ('service') with a key constraint ('by name'). However, it doesn't explicitly differentiate from sibling tools like 'get_services_by_team' or 'get_all_teams', which might also retrieve services through different mechanisms.
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 sibling tools like 'get_services_by_team' (which filters by team rather than name) or 'get_all_teams' (which might return all services without filtering), leaving the agent to infer usage context from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_teamsGet All TeamsARead-only
Returns all teams from the service atlas api :return: array of teams objects
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds minimal behavioral context beyond this by specifying the return type ('array of teams objects'), but doesn't mention potential limitations like pagination, rate limits, or authentication needs. With annotations covering safety, a 3 is appropriate as it adds some value but not rich behavioral details.
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 two short sentences with no wasted words, efficiently stating the purpose and return value. However, the formatting with a colon before 'return' is slightly awkward, and it could be more polished, preventing a perfect score.
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 simplicity (0 parameters, read-only, no output schema), the description is adequate but minimal. It covers the basic purpose and return type, but lacks details on error handling, response format beyond 'array of teams objects', or integration with sibling tools. For a straightforward list tool, this is acceptable but not comprehensive.
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 0 parameters with 100% coverage, so the schema fully documents the absence of parameters. The description doesn't need to add parameter information, and it correctly doesn't mention any. Baseline for 0 parameters is 4, as it avoids unnecessary details.
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 ('Returns') and resource ('all teams from the service atlas api'), making the purpose unambiguous. It distinguishes from siblings like 'get_teams_by_service' by indicating it returns ALL teams without filtering. However, it doesn't explicitly contrast with all sibling tools, so it's not a perfect 5.
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 by specifying it returns 'all teams', suggesting this should be used when a complete list is needed rather than filtered results. However, it doesn't explicitly state when to use this vs. alternatives like 'get_teams_by_service' or provide any exclusion criteria, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_debtGet Debt ReportBRead-only
Gets a report of all services that have open debts and a count of the number of debts associated with them :return:
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, which the description aligns with by using 'Gets' (implying a read operation). The description adds value by specifying the report's content ('all services with open debts' and 'count of debts'), which isn't covered by annotations. However, it lacks details on behavioral traits like pagination, rate limits, or error handling, leaving gaps despite the annotations providing basic safety information.
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 sentence that states the purpose, which is appropriately concise for a simple tool. However, it includes a trailing ':return:' that adds no value and disrupts clarity. The structure is front-loaded with the main action, but the extraneous text slightly reduces efficiency.
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 simplicity (0 parameters, read-only annotation, no output schema), the description is adequate but minimal. It explains what the tool returns (a report with services and debt counts), which is necessary since there's no output schema. However, it doesn't cover potential complexities like report format, sorting, or filtering, leaving room for improvement in guiding an agent's expectations.
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 0 parameters with 100% description coverage, so the schema fully documents the absence of inputs. The description doesn't need to add parameter details, and it correctly avoids mentioning any. This meets the baseline for tools with no parameters, as it doesn't mislead or create confusion about inputs.
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: 'Gets a report of all services that have open debts and a count of the number of debts associated with them.' It specifies the verb ('Gets'), resource ('report'), and scope ('all services with open debts'), distinguishing it from siblings like 'get_debts_for_service' (which focuses on a specific service). However, it doesn't explicitly contrast with 'find_service_by_name' or 'get_services_by_team', which could provide more differentiation.
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 when to prefer 'get_debt' over 'get_debts_for_service' (e.g., for aggregated vs. detailed views) or other siblings like 'get_all_teams' or 'get_services_by_team'. Without such context, an agent might struggle to select the appropriate tool for specific scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_debts_for_serviceGet Debts for ServiceCRead-only
Gets the debts for a specific service :param service_id: :return:
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, which the description doesn't contradict. The description adds minimal behavioral context beyond annotations—it specifies the tool retrieves debts 'for a specific service', but doesn't disclose details like return format, pagination, error handling, or authentication requirements. With annotations covering safety, the description provides basic scope but lacks rich behavioral details.
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 under-specified rather than concise. It consists of a brief statement followed by incomplete Python-style docstring fragments (':param service_id:' and ':return:'), which are wasted space without adding value. The structure is poor, with the second line being non-functional and not front-loaded with essential information.
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 has no output schema and annotations only cover read-only status, the description is incomplete. It doesn't explain what 'debts' entail (e.g., amounts, statuses, dates) or the return structure, leaving the agent guessing. For a tool with one parameter and no schema descriptions, more context is needed to be adequately helpful.
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 0%, so the description must compensate. It mentions ':param service_id:' but adds no semantic meaning—it doesn't explain what a service_id is, its format, or where to obtain it. The description fails to clarify the parameter's role or constraints, leaving it undocumented beyond the schema's type information.
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 states the tool's purpose as 'Gets the debts for a specific service', which is a clear verb+resource combination. However, it doesn't distinguish this tool from its sibling 'get_debt', leaving ambiguity about whether this tool retrieves multiple debts for a service while 'get_debt' retrieves a single debt by ID. The purpose is understandable but lacks sibling differentiation.
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 like 'get_debt' or 'get_services_by_team'. It doesn't mention prerequisites, such as needing a valid service_id, or contextual factors like whether this is for reporting or payment processing. Usage is implied by the parameter name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_releasesGet Releases in Date RangeARead-only
Get a list of releases between two dates. Start date is inclusive, while the end date is an exclusive :param start: start date in the format YYYY-MM-DD (inclusive) :param end: end date in the format YYYY-MM-DD (exclusive) :return: list of releases
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | ||
| end | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating this is a safe read operation. The description adds useful behavioral context about date inclusivity/exclusivity and return format ('list of releases'), which goes beyond annotations. However, it doesn't mention potential limitations like pagination, rate limits, or authentication needs, leaving some behavioral aspects unclear.
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 appropriately sized and front-loaded with the main purpose. The parameter documentation is necessary given the schema coverage gap. However, the ':param' and ':return' formatting is slightly verbose and could be more integrated, though it remains clear and efficient.
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 moderate complexity (2 required parameters, read-only operation) and the presence of an output schema, the description is reasonably complete. It covers purpose, parameters, and return type. The main gap is lack of sibling differentiation, but overall it provides sufficient context for an agent to use the tool correctly.
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?
With 0% schema description coverage, the description fully compensates by providing detailed parameter semantics. It specifies both parameters ('start' and 'end'), their required formats ('YYYY-MM-DD'), and clarifies their behavior (inclusive vs exclusive). This adds significant value beyond the bare schema.
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 with a specific verb ('Get') and resource ('list of releases'), and specifies the date range constraint. However, it doesn't differentiate from sibling tools like 'get_all_teams' or 'get_debts_for_service' which might also retrieve data, so it doesn't fully distinguish itself from 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 implies usage by specifying date range filtering, but doesn't explicitly state when to use this tool versus alternatives like 'get_all_teams' or 'get_debts_for_service'. There's no guidance on prerequisites, exclusions, or specific scenarios where this tool is preferred over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_services_by_teamGet Services for TeamBRead-only
Tool that returns a list of services for a team based on id :param team_id: guid for the team :return: array of services objects from the api
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations include readOnlyHint: true, indicating this is a safe read operation. The description adds that it 'returns a list of services' and mentions the return type ('array of services objects from the api'), which provides useful context beyond the annotations. However, it lacks details on rate limits, error handling, or pagination, which would enhance transparency.
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 concise and front-loaded, stating the core purpose in the first sentence. The additional parameter and return details are brief and relevant. However, the colon formatting for ':param' and ':return' is slightly verbose and could be integrated more smoothly into the text.
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 (1 parameter, no output schema), the description is adequate but has gaps. It covers the basic operation and parameter, but lacks output details (e.g., what fields 'services objects' include) and doesn't leverage context from sibling tools. With annotations providing safety info, it meets minimum viability but isn't fully comprehensive.
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?
With schema description coverage at 0%, the description carries the full burden for parameter documentation. It explains 'team_id' as a 'guid for the team', adding semantic meaning not in the schema. Since there's only one parameter, this is sufficient, but a perfect score would require more detail like format examples or constraints.
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: 'returns a list of services for a team based on id'. It specifies the verb ('returns'), resource ('services'), and scope ('for a team'), making the function understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_teams_by_service' or 'find_service_by_name', which would be needed for 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 provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_all_teams' or 'get_teams_by_service', nor does it specify prerequisites or contexts for usage. This leaves the agent without clear direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teams_by_serviceGet Teams for ServiceBRead-only
Gets a list of teams that own a service based on id :param service_id: the guid for the service :return: a list of teams objects
| Name | Required | Description | Default |
|---|---|---|---|
| service_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds that it returns 'a list of teams objects', giving some output context, but doesn't detail pagination, error handling, or auth needs. With annotations covering safety, this adds minimal behavioral value beyond what's structured.
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 brief and front-loaded with the core purpose, using two sentences efficiently. However, the formatting with ':param' and ':return' is slightly verbose for MCP standards, and it could be more polished without sacrificing clarity.
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 1 parameter, no output schema, and annotations covering read-only safety, the description is minimally adequate. It explains the parameter and return type, but lacks details on output structure or error cases. For a simple lookup tool, this meets basic needs but leaves gaps in full context.
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 0%, so the description must compensate. It explains 'service_id' as 'the guid for the service', clarifying its format and purpose beyond the schema's type. With only one parameter, this is sufficient to achieve a high score, though not exhaustive.
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 ('Gets a list of teams') and resource ('that own a service'), with a specific parameter (service_id). It distinguishes from siblings like 'get_all_teams' (no filtering) and 'get_services_by_team' (inverse relationship), but doesn't explicitly name alternatives. This makes it clear but not fully differentiated.
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?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't specify if this should be used instead of 'get_all_teams' when filtering by service, or how it relates to 'find_service_by_name' for lookup workflows. The description implies usage through the parameter but lacks explicit context or exclusions.
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.
7 tool updates
v1.0.0- First observed
find_service_by_name - First observed
get_all_teams - First observed
get_debt - First observed
get_debts_for_service - First observed
get_releases - First observed
get_services_by_team - First observed
get_teams_by_service
TDQS
Scored across 7 tools
Each tool has a distinct purpose targeting specific resources and operations: find_service_by_name searches services by name, get_all_teams retrieves all teams, get_debt provides a debt report, get_debts_for_service gets debts for a specific service, get_releases fetches releases between dates, get_services_by_team lists services for a team, and get_teams_by_service lists teams for a service. No overlap or ambiguity exists between these functions.
Tool names follow a consistent snake_case pattern with a clear verb_noun structure (e.g., find_service_by_name, get_all_teams). However, there is a minor deviation: get_debt uses a singular noun while others use plural or compound nouns, slightly breaking the pattern but not affecting readability.
With 7 tools, the count is well-scoped for a service atlas domain, covering key operations like service and team retrieval, debt management, and release tracking. Each tool serves a unique function without redundancy, making the set efficient and manageable.
The toolset provides good coverage for querying services, teams, debts, and releases, supporting core workflows. A minor gap exists in update or delete operations for these resources, but agents can likely work around this for read-heavy use cases in a service atlas context.
Maintenance
Related MCP Connectors
Software component catalog: search your org's services, docs, APIs, dependencies, and ownership.
- OneOAuthai.withone
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a standardized MCP interface for interacting with HTTP tools and services, enabling unified API access and management.MIT
- AlicenseAqualityDmaintenanceExposes a dependency graph of strategic sourcing artifacts and analyses as an MCP server, enabling navigation of phases, analyses, deliverables, and graph traversal for impact analysis and build order.16Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI agents to map cross-repository dependencies, detect breaking changes in API contracts, and assess impact across services.10MIT
- AlicenseAqualityCmaintenanceExposes a materialized service dependency graph as an MCP toolset for persistent, queryable root-cause analysis via Cypher queries.51Apache 2.0