Skip to main content
Glama

CloudOps MCP

CloudOps MCP는 정규화된 운영 인프라 컨텍스트(로그, 메트릭, 배포, 상태)를 AI 에이전트에 소수의 타입화된 경계 있는 도구 세트를 통해 노출하는 읽기 전용 Model Context Protocol 서버입니다.

존재 이유

인시던트를 조사하는 에이전트는 운영 컨텍스트가 필요합니다: 최근에 무엇이 변경되었는지, 오류율이 어떻게 보이는지, 로그가 무엇을 말하는지. 클라우드 API에 대한 무제한 액세스가 필요하지 않으며, 근본 원인을 결정하는 주체가 되어서는 안 됩니다.

CloudOps MCP는 둘 사이에 위치합니다:

Cloud APIs / observability systems
        |
Provider adapters
        |
Normalized operational domain
        |
Deterministic services
        |
MCP tools
        |
AI agent

각 계층은 더욱 정규화하고 에이전트가 요청할 수 있는 범위를 좁힙니다. 제공자 어댑터는 벤더 API를 공유 도메인 모델로 변환합니다. 서비스는 경계, 순서, 집계를 결정론적으로, 모든 제공자에 대해 동일한 방식으로 적용합니다. MCP 도구는 이를 작은 타입화된 표면으로 노출합니다.

CloudOps MCP는 근본 원인 결론이 아닌 운영 사실을 반환합니다. 도구는 "오류율이 14:06에 0.4%에서 8%로 증가했습니다"라고 말할 수 있지만, "배포가 중단을 일으켰습니다"라고 말하지 않습니다. 그 판단은 CloudOps MCP가 증거로 제공하는 사실을 바탕으로 에이전트에게 맡겨집니다.

Related MCP server: cloud-chat-assistant

기능

6개의 도구, 모두 읽기 전용이며 경계가 있습니다:

도구

목적

get_services

알려진 서비스 목록과 각 서비스에 대해 구성된 기능을 나열합니다.

get_service_health

서비스에 대해 제공자가 보고한 상태입니다. 로그나 메트릭에서 추론하지 않습니다.

get_recent_deployments

시간 범위와 개수로 제한된 최근 배포 이벤트입니다.

get_logs

시간 범위, 개수, 메시지 길이로 제한된 로그 이벤트입니다.

get_metrics

결정론적 집계(최소/최대/평균/마지막)가 포함된 메트릭 시리즈; 원시 포인트는 옵트인이며 제한됩니다.

get_operational_snapshot

복합 보기: 최근 배포, 구성된 스냅샷 메트릭, 최근 로그, 상태를 하나의 제한된 호출로 제공합니다.

get_operational_snapshot은 다른 다섯 도구가 사용하는 동일한 기본 서비스를 구성하여 네 개의 독립적인 쿼리를 동시에 실행합니다. 제공자와 직접 통신하지 않으며, 한 섹션을 사용할 수 없다고 해서 전체가 실패하지 않으며, 각 섹션은 자체 상태를 보고합니다.

설계 원칙

  • 구성상 읽기 전용. 제공자 인터페이스는 변형 메서드를 노출하지 않습니다. 쓰기 API로 가는 코드 경로가 없습니다.

  • 제공자 중립적인 서비스 식별. 서비스는 (service, environment)로 식별됩니다. 벤더별 식별자(CloudWatch 로그 그룹, Kubernetes 객체 이름)는 제공자 바인딩 내부에 유지되며 공개 계약의 일부가 되지 않습니다.

  • 표준적이며 확장 가능한 메트릭. error_rate, latency_p99 및 유사한 이름은 벤더의 것이 아닌 우리의 것입니다. 표준 이름에서 실제 메트릭으로의 매핑은 서비스별 구성에 있으며, 어휘는 고정된 열거형이 아닌 개방적입니다.

  • 제한된 쿼리. 모든 원격 측정 쿼리에는 시간 범위 상한과 개수 상한이 있습니다. 호출자는 더 적게 요청할 수 있지만, 무제한 데이터를 요청할 수는 없습니다.

  • 명시적 데이터 가용성. 모든 수집은 SUCCESS, EMPTY, PARTIAL, 또는 FAILED 중 하나를 보고합니다. 누락된 데이터가 "정상" 또는 "아무 일도 일어나지 않음"으로 조용히 처리되지 않습니다.

  • 가용성과 결과 분리. NOT_CONFIGURED(연결된 제공자 없음)와 EMPTY(성공적으로 쿼리했지만 일치 항목 없음)는 다른 상태이며 혼동되지 않습니다.

  • 내부 유출 없이 출처 추적 가능. 개별 결과는 제공자 어댑터가 제공할 때 provider 및 source를 전달합니다. 제공자를 호출하는 데 사용된 내부 참조는 공개 출력에 복사되지 않습니다.

  • 모든 곳에서 UTC. 모든 타임스탬프는 시간대를 인식하며 UTC로 정규화됩니다; 순수 날짜/시간은 모델 경계에서 거부됩니다.

  • MCP 서버 내부에 LLM 없음. 요약, 분류, 로그 내용에 대한 추론이 없습니다. 로그 메시지는 불투명하고 신뢰할 수 없는 텍스트로 처리됩니다.

  • 인과 추론 없음. 도구는 무엇이 변경되었고 언제 변경되었는지 보고합니다. 이유를 해석하는 것은 에이전트에게 맡겨집니다.

빠른 시작: 가짜 모드

가짜 모드는 기본값이며 CloudOps MCP를 시험해보는 주요 방법입니다. 클라우드 계정이 필요하지 않습니다.

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

서버 실행(stdio 전송):

python -m cloudops_mcp.server

또는 패키지가 콘솔 스크립트와 함께 설치된 경우:

cloudops-mcp

서버는 stdio를 통해 MCP를 사용하며 다른 쪽 끝에 클라이언트가 있어야 합니다. Python에서 공식 SDK의 클라이언트를 사용하여 직접 시도하려면:

import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    params = StdioServerParameters(command="python", args=["-m", "cloudops_mcp.server"])
    async with stdio_client(params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = await session.list_tools()
            print([t.name for t in tools.tools])

            result = await session.call_tool(
                "get_operational_snapshot",
                {"service": "checkout-api", "environment": "production"},
            )
            print(result.structured_content)

asyncio.run(main())

가짜 시나리오

CLOUDOPS_MCP_SCENARIO로 시나리오 선택(기본값 healthy):

시나리오

시뮬레이션 내용

healthy

모든 기능이 구성된 서비스, 특이사항 없음.

bad_deploy

배포 후 오류율 및 지연 시간 변화, 그 다음 타임아웃 로그.

partial

하나의 기능이 쿼리 중간에 실패, 하나는 구성되지 않음, 나머지는 성공.

CLOUDOPS_MCP_SCENARIO=bad_deploy python -m cloudops_mcp.server

bad_deploy는 고정된 타임스탬프에 세 가지 상관된 사실을 시드합니다: 배포, 몇 분 후 메트릭 변화, 그 직후 타임아웃 로그 라인. CloudOps MCP는 이 세 가지 사실만 보고하고 그 이상은 보고하지 않습니다. 배포가 오류를 일으켰다고 주장하지 않으며, 그 추론은 전적으로 소비하는 에이전트에게 맡겨집니다.

AWS CloudWatch 모드

pip install -e ".[aws]"        # runtime only
pip install -e ".[dev,aws]"    # development
CLOUDOPS_MCP_MODE=aws CLOUDOPS_MCP_CONFIG=/path/to/cloudops.toml cloudops-mcp

전체 예제 구성은 examples/aws-cloudwatch.toml을 참조하세요. 해당 파일에는 실제 계정 ID, ARN 또는 자격 증명이 없으며 플레이스홀더 값만 사용합니다.

자격 증명은 전적으로 boto3의 표준 제공자 체인에서 가져옵니다: AWS_PROFILE, AWS_REGION / AWS_DEFAULT_REGION, 환경 자격 증명, 또는 IAM 역할. CloudOps MCP는 액세스 키 또는 시크릿을 읽거나 저장하거나 기록하지 않습니다.

AWS 모드에서 구현된 기능:

  • 로그: CloudWatch Logs FilterLogEvents.

  • 메트릭: CloudWatch GetMetricData (MetricStat 쿼리만).

아직 구현되지 않음: AWS 기반 배포 및 상태. 해당 섹션 없이 구성된 서비스는 다른 구성되지 않은 기능과 마찬가지로 해당 기능에 대해 NOT_CONFIGURED를 보고합니다. 구성 스키마, 페이지 매김 동작 및 제한 사항은 docs/aws.md를 참조하세요.

AWS IAM

이 통합을 위한 최소 읽기 전용 정책(가상의 계정 및 로그 그룹):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "logs:FilterLogEvents",
      "Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/checkout-api"
    },
    {
      "Effect": "Allow",
      "Action": "cloudwatch:GetMetricData",
      "Resource": "*"
    }
  ]
}

FilterLogEvents는 특정 로그 그룹 ARN으로 범위를 좁힐 수 있습니다. 이 통합이 발행하는 MetricStat 쿼리의 경우, AWS IAM 권한 부여 모델에서 GetMetricData에는 리소스 수준 범위 지정이 없으므로 해당 문은 Resource: "*"를 사용합니다. 이는 API의 속성일 뿐 여기서 선택한 사항이 아닙니다.

제한된 쿼리

리소스

기본값

하드 상한

나열된 서비스

50

200

로그 이벤트

100

500

로그 메시지 길이

-

2000자

로그/메트릭 시간 범위

1시간

24시간(로그), 7일(메트릭)

시리즈당 메트릭 포인트

-

500

배포 이벤트

20

100

서비스당 스냅샷 메트릭

-

5

모든 제한된 결과는 requested_bounds와 applied_bounds를 모두 보고하므로 호출자가 정확히 무엇이 제한되었는지 확인할 수 있습니다. 요청을 하드 상한으로 제한하는 것은 PARTIAL과 동일하지 않습니다: 제한되었지만 완전히 충족된 쿼리는 여전히 SUCCESS입니다. PARTIAL은 추출 자체가 불완전한 것으로 알려진 경우입니다. 예를 들어 제공자가 페이지를 매기다가 적용된 창 내에서 모든 일치 항목을 모두 소진하기 전에 중단된 경우입니다.

데이터 가용성 의미론

두 개의 직교 질문, 절대 하나로 합쳐지지 않음:

  1. 해당 서비스에 대해 기능이 전혀 구성되었습니까? (CONFIGURED / NOT_CONFIGURED)

  2. 쿼리되었다면, 무슨 일이 일어났습니까? (SUCCESS / EMPTY / PARTIAL / FAILED)

상태

의미

NOT_CONFIGURED

이 기능에 대해 제공자가 연결되지 않았습니다. 쿼리 시도되지 않았습니다.

EMPTY

제공자가 쿼리되었고, 추출이 완료되었으며, 일치 항목이 없었습니다.

SUCCESS

제공자가 쿼리되었고 완전한 결과를 반환했습니다.

PARTIAL

추출이 불완전한 것으로 알려져 있습니다. 데이터가 있을 수도 있고 없을 수도 있습니다. 예: 지금까지 스캔한 모든 페이지가 비어 있었지만 더 많은 페이지가 존재합니다.

FAILED

제공자가 쿼리되었고 호출 자체가 실패했습니다(시간 초과, 인증 오류, 속도 제한).

상태 제공자가 구성되지 않은 서비스의 건강 점검은 NOT_CONFIGURED이며 EMPTY 또는 FAILED가 아닙니다. 시간 창에서 합법적으로 아무것도 찾지 못한 로그 리는 EMPTY이며 FAILED가 아닙니다. 사용 가능한 아무것도 반환하기 전에 속도 제한에 걸린 메트릭 호출은 조용히 빈 데이터가 아닌 이유와 함께 FAILED입니다.

구조적 MCP 출력

모든 도구는 타입화된 인수를 받고 타입화된 Pydantic 모델을 반환합니다. 공식 Python MCDK는 structuredContent와 도구의 출력 스키마를 반환 타입에서 직접 파생합니다. 도구 응답은 실데 구조 데이티이며 텍트 블록으로 감싸진 JSN 문자열이 아닙니다.

아키텍처

flowchart TD
    subgraph Providers
        Fake[Fake providers]
        AWS[AWS CloudWatch providers]
    end

    Fake --> Services
    AWS --> Services

    Registry[ServiceRegistry] --> Services

    subgraph Services[Deterministic services]
        Catalog[catalog_service]
        Health[health_service]
        Deploy[deployment_service]
        Logs[logs_service]
        Metrics[metrics_service]
        Snapshot[snapshot_service]
    end

    Snapshot --> Deploy
    Snapshot --> Logs
    Snapshot --> Metrics
    Snapshot --> Health

    Services --> Tools[MCP tools]
    Tools --> Agent[AI agent]

get_operational_snapshot은 기본 서비스를 구성하며, 이를 우회하거나 스스로 공급자와 통신하지 않습니다. 전인 기적 분는 docs/architure.md를 참조하세요.

테스트

  • 결정론적 가짜 시나리오는 전 도구 표면을 종단 간 테스트합니다.

  • 공급자 계층 테스트는 고의로 잘못 행동하는 스텁 공급자(잘못된 순서, 무시된 경계)를 사용하여 서비스 계층이 잘 행동하는 공급자뿐만 아니라 출력 자체를 방어함을 증명합니다.

  • AWS 공급자 테스트는 작은 스텁 CloudWatch 클라이언트를 사용하며, 실제 AWS 호출, moto, LocalStack이 없습니다.

  • 하나의 테스트는 실제 MCP SDK 클라이언트를 인프로세스 서버에 대해 구동하여 내부 논리뿐만 아니라 프로토콜 경계 자체(도구 발견, 구조적 출력)를 확인합니다.

ruff check src tests
mypy src tests --strict
pytest -q

현재 한계

  • AWS 라이브 검증은 타입화된 구성 파싱, 스텁 클라이언트 테스트, 실제 MCP 클라이언트/서버 경계로 이루어졌으며, 아직 실제 AWS 계정에 대해 이루어지지 않았습니다. 그렇게 하려면 사용가 선택한 리소스가 필요하며 의도적으로 자동화되지 않았습니다: CloudOps MCP는 스스로 계정을 발하거나 조사하지 않습니다.

  • 아직 AWS 기반 배포 또는 상대 공급자가 없습니다.

  • stdio 전송만, 원격 MCP 없습니다.

  • 서비스 레지스트리는 정적이며 구성 기반이며, 클라우드 계정에서 서비스를 자동으로 발하지 않습니다.

  • 변형, 치유 또 쓰기 경가 전혀 없습니다.

로드맵

  • 기존 공급자에 추가 읽기 전용 기능.

  • 두 번째 실 공급자, 둘 이상 벤더에 대해 정규화 경계를 압력 테스트.

  • 원격 전송, 배포 시나리오가 실제로 필할 경우.

  • 인시던트 응답 에이전트에 의 한 소비, 일반적인 MCP 클라이언트의 한 예시로. CloudOps MCP는 특정 소비에 결되지 않않습니다.

보안

  • 프로바이더 인터페이스에는 변경 메서드가 전혀 없습니다.

  • 셸 실행이나 클라우드 CLI 서브프로세스 호출이 없습니다.

  • 최소 권한 IAM: 정확히 logs:FilterLogEvents와 cloudwatch:GetMetricData만 있으며, "만약을 대비해" 요청된 것은 없습니다.

  • 표준 AWS 자격 증명 체인만 사용하며, 사용자 정의 자격 증명 처리는 없습니다.

  • 내부 프로바이더 참조(로그 그룹 이름, CloudWatch 차원)는 도구 출력에 절대 나타나지 않습니다.

  • 로그 콘텐츠는 신뢰할 수 없는 불투명 텍스트로 처리되며, 절대 구문 분석, 실행 또는 해석되지 않습니다.

  • 예상치 못한 오류는 도구 경계에서 정리되며, 고정된 일반 메시지만 경계를 넘고, 원시 예외 문자열은 절대 넘지 않습니다.

  • 모든 원격 측정 쿼리는 제한되어 있어, 프로바이더 API와 에이전트의 컨텍스트 창을 모두 보호합니다.

라이선스

MIT, LICENSE를 참조하세요.

Available Tools

6 tools
get_logsB

Get log events for a service, bounded by time range, count, and message length. Message content is opaque and never interpreted.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYes
max_eventsNo
time_rangeNo
environmentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
capabilityNo
collectionNo
availabilityYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that message content is opaque and never interpreted and that results are bounded by count and message length (i.e., truncation behavior), but omits ordering, permissions, and, critically, what happens when time_range is null.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core operation front-loaded and zero filler; the opacity caveat follows the scope statement logically.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. However, the absence of annotations and of any guidance on the required service/environment values or on the null-defaulted time_range leaves meaningful gaps for an agent to resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage on the named properties is 0%, so the description must compensate. It loosely maps to time_range and max_events but gives no format or default semantics, and the two required parameters (service, environment) are undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get log events for a service') and names the dimensions it is bounded by (time range, count, message length). The resource is clearly distinguishable from siblings like get_metrics and get_service_health, though it never explicitly routes the agent against them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_metrics or get_operational_snapshot for higher-level views. The bounding clauses describe limits, not when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_metricsA

Get metric series for a service. metric_names must be canonical names from get_services' available_metrics for that service. Always includes deterministic aggregates (min/max/average/last); raw points only when include_points=True, bounded.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYes
max_pointsNo
time_rangeNo
environmentYes
metric_namesYes
include_pointsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
capabilityNo
collectionNo
availabilityYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does disclose output-shaping behavior: deterministic aggregates (min/max/average/last) are always returned, raw points only when include_points=True, and results are bounded. It says nothing about auth requirements, defaults for time_range, or rate limits, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and then the two key constraints; almost no filler. The trailing word 'bounded' is terse to the point of ambiguity about what bound applies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not restate return fields, and it still usefully flags the conditional raw-points behavior. Given the 0% parameter coverage, it leaves time_range, service, and environment semantics undocumented, which is the main gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, so the description must compensate and only partially does: it explains metric_names (canonical names from get_services) and include_points, and hints at max_points via 'bounded'. service, environment, and time_range semantics (inclusive start / exclusive end, default) are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get metric series for a service'), which naturally separates it from siblings like get_logs or get_service_health that operate on different resources. It is clear but never explicitly names a sibling or contrasting scope, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete precondition: metric_names must be canonical names obtained from get_services' available_metrics, effectively telling the agent to call get_services first. It does not state when to prefer get_metrics over get_operational_snapshot or get_service_health, so no exclusions are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_operational_snapshotB

Get a bounded operational snapshot for a service: recent deployments, its configured snapshot metrics, recent logs, and health. Each section reports its own status independently; a failure or unconfigured capability in one section never hides the others. Reports facts only, never a root cause.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYes
time_rangeNo
environmentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
logsYes
healthYes
metricsYes
serviceYes
deploymentsYes
environmentYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does meaningful work: each section reports status independently, a failure or unconfigured capability in one section never hides others, and it reports facts only, never root cause. These are genuinely useful operational traits. It still omits what 'bounded' means concretely, permission/auth requirements, and volume limits for logs and metrics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the purpose followed by two high-value behavioral notes. No filler, and each sentence adds information about scope or behavior rather than restating the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not needed, and the description adequately covers purpose and partial-failure semantics. However, for an aggregation tool with three parameters and 0% schema coverage, the absence of parameter semantics and any guidance on choosing it over its four siblings leaves clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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, and it largely does not. 'for a service' gestures at the required service parameter, but environment, the optional time_range, and the default-null behavior are unexplained. The nested TimeRange carries its own schema description, but nothing in the tool description clarifies how parameters shape the snapshot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get an operational snapshot for a service) and enumerates the four content areas: deployments, metrics, logs, and health. This maps cleanly onto the four sibling tools, but the description never explicitly contrasts itself with those siblings (e.g., 'use this instead of calling get_logs/get_metrics separately'), so differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'bounded' hints at a scoped overview use case, but there is no explicit when-to-use, when-not-to-use, or mention of the sibling alternatives it aggregates. An agent cannot tell from the text whether to prefer this tool over get_recent_deployments + get_logs + get_metrics + get_service_health.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_deploymentsC

Get recent deployment events for a service, bounded by time/count

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYes
max_eventsNo
time_rangeNo
environmentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
capabilityNo
collectionNo
availabilityYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. 'Bounded by time/count' gestures at limiting behavior, but it never says what happens when time_range or max_events are omitted (both default to null), whether there is a server-side default window, or what the ordering/recency guarantee is. Read-only intent is only implied by the verb 'get'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the scope qualifier follows the core action. It is efficient, though 'bounded by time/count' is compressed to the point of ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is not required, and the read-only nature of a 'get' tool is largely self-evident. Still, with zero annotations and two nullable tuning parameters, the description omits default-window behavior and the required environment parameter, leaving the agent to infer invocation semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 covers 'service' and loosely maps 'time/count' onto time_range and max_events, but the required 'environment' parameter is never mentioned and no defaults or format details are supplied (the UTC/inclusive-start semantics live only in the nested schema).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb (get) and resource (recent deployment events) plus scope (for a service, bounded by time/count), which distinguishes it from get_logs, get_metrics, and get_service_health. It does not name any sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'recent' hints at a use case, but there is no statement of when to prefer this over get_logs, get_metrics, or get_operational_snapshot, and no exclusions or prerequisites. An agent must infer everything about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_service_healthB

Provider-reported health signal for a service, never inferred

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYes
environmentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
capabilityNo
collectionNo
availabilityYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose one meaningful trait: the signal is provider-reported and never inferred, which tells the agent this is authoritative provenance rather than a derived heuristic. It still omits freshness, auth requirements, failure/unknown states, and error semantics for a tool whose entire value is a status signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clause, front-loaded with the resource and followed by the one qualifier that matters. Nothing is padded and nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the tool is structurally simple with only two params. Still, with zero annotations and zero parameter coverage, the definition leaves the agent without usage context or argument semantics, so it is only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (service, environment) have 0% schema description coverage, and the description adds no meaning — it does not clarify identifier format, environment naming, or whether defaults exist. For a 2-param required tool at zero coverage, the description should compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (a service's health signal) and its provenance, so an agent can distinguish it from get_logs, get_metrics, or get_recent_deployments. However, there is no explicit verb and no named sibling to route against, so differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as get_operational_snapshot or get_metrics. The agent is left to infer that this is the health-check counterpart to the other read tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_servicesC

List known services and which capabilities are configured for each.

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentNo
max_servicesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
servicesNo
truncatedNo
applied_maxYes
requested_maxYes
returned_countYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only list but does not state authentication requirements, pagination behavior, rate limits, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is appropriately concise for a list operation, though its brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. However, with zero annotations and 0% parameter description coverage, the description omits filtering behavior (environment) and result limiting (max_services), leaving the agent without enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention the environment or max_services parameters at all. With 0% schema description coverage, it fails to compensate for the missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('services') plus the returned data ('capabilities configured for each'). However, it does not differentiate from siblings such as get_operational_snapshot, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, prerequisites, or alternatives are named. Sibling tools like get_service_health or get_operational_snapshot are not referenced, leaving the agent to infer when this inventory tool is appropriate.

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.

  1. 6 tool updatesv0.1.0
    • First observedget_logs
    • First observedget_metrics
    • First observedget_operational_snapshot
    • First observedget_recent_deployments
    • First observedget_service_health
    • First observedget_services

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct observability resource or action: service inventory, deployments, health, logs, metrics, and a composite snapshot. The composite snapshot is explicitly scoped as a bounded aggregation, so it does not blur with the individual tools. No two tools appear to do the same thing.

Naming Consistency5/5

All six tools use the same get_ verb prefix and snake_case convention, with clear noun phrases (get_services, get_recent_deployments, get_service_health, get_logs, get_metrics, get_operational_snapshot). The pattern is predictable and easy to scan.

Tool Count5/5

Six tools is a well-scoped size for a read-only CloudOps observability server. Each tool covers a distinct monitoring concern without redundant or filler endpoints.

Completeness4/5

The surface covers core operational data: services, deployments, health, logs, metrics, and a combined snapshot. Minor gaps exist for adjacent operational context such as alerts/incidents or deployment detail views, but core diagnostic workflows are supported.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that connects Claude (or any MCP compatible client) to your existing log infrastructure. Query, summarize, and trace logs in plain English across GCP Cloud Logging, AWS CloudWatch, Azure Log Analytics, Grafana Loki, and Elasticsearch without writing filter expressions or leaving your editor.
    204 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for querying observability data from Elasticsearch, SkyWalking, and Prometheus/VictoriaMetrics, enabling AI models to search logs, traces, and metrics across environments.
    9
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A read-only MCP server that exposes tools to query Datadog monitors and logs, and AWS CloudWatch Logs, and to group recurring errors by fingerprint. Designed for use with Claude Code to diagnose issues and propose fixes.
    MIT