appd-mcp
This server is a read-only Model Context Protocol (MCP) interface for AppDynamics, exposing 12 tools that allow LLM agents to query and analyze an AppDynamics environment. All operations are strictly read-only and use OAuth API-client credentials for authentication.
List Applications (
appd_list_applications): Retrieve all business applications visible to the configured API client, with optional filtering by recent activity.Get Application Model (
appd_get_application_model): Fetch the full topology of an application including business transactions, tiers, nodes, and backends — the primary anchor for root cause analysis workflows.Discover Metric Paths (
appd_get_metric_hierarchy): Walk the metric folder hierarchy for an application to discover valid metric paths (cached for 5 minutes).Query Metrics (
appd_query_metrics): Fetch up to 20 metric time series in parallel, supporting rollup aggregation and customizable time ranges.Get Transaction Snapshots (
appd_get_transaction_snapshots): Retrieve slow, error, or diagnostic transaction snapshots with optional exit call details (DB/HTTP/queue) for dependency analysis.Get Health Rule Violations (
appd_get_health_rule_violations): Retrieve open or recently-closed health rule violations within a specified time window.Get Anomaly Violations (
appd_get_anomaly_violations): Retrieve anomaly violations with optional suspected-cause RCA payloads for incident analysis.Get Events (
appd_get_events): Fetch up to 600 events (deployments, errors, custom, etc.) filtered by type and severity within a time window.List Health Rules (
appd_list_health_rules): List health rule summaries (id, name, enabled status) with an option to fan-out and fetch full rule definitions.Get Alerting Configuration (
appd_get_alerting_config): Composite parallel fetch of health rules, policies, actions, and schedules — useful for "what alerts go to whom" audits.Query Analytics Events (
appd_query_analytics_events): Run ADQL queries against the AppDynamics Events Service, supporting single or multi-query batches (up to 20) and pagination.Get Dependency Map (
appd_get_dependency_map): Synthesize a tier-to-tier and tier-to-backend service dependency map by aggregating the application model and transaction snapshot exit calls.
Click on "Install 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., "@appd-mcpList business applications"
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.
appd-mcp
What is this? A Model Context Protocol server, written in TypeScript, that exposes 12 read-only AppDynamics capabilities (applications, topology, metrics, snapshots, health rules, anomalies, events, alerting config, analytics events, dependency map) as task-oriented MCP tools an LLM agent can call directly. stdio transport, OAuth API-client credentials, no writes, no persistence beyond a local
.env.
appd-mcpis not affiliated with, endorsed by, sponsored by, or certified by Cisco Systems, Inc., Splunk LLC, or AppDynamics, LLC. SeeTRADEMARKS.md.
Quickstart (60 seconds)
Requires Node 22+ and pnpm.
git clone https://github.com/jagalliers/appd-mcp.git
cd appd-mcp
pnpm install
pnpm build
pnpm wizard # interactive wizard: prompts, validates, writes .env, registers in MCP hostv0.1.1 and earlier docs may say
pnpm setup. That name was renamed topnpm wizardin v0.1.2 becausesetupcollides with pnpm's built-in command (it configuresPNPM_HOME/PATH, not our wizard).
That's it. The wizard probes your live AppDynamics Controller before
saving anything, refuses http:// URLs, won't run unattended (TTY
required), and writes .env with 0600 perms plus a timestamped
backup. Re-runs are idempotent.
If you'd rather configure by hand, see Documentation → Manual configuration below.
Related MCP server: meraki-dashboard-api
Tools
Tool | Capability |
| List business applications |
| Topology: business transactions, tiers, nodes, backends |
| Discover valid metric paths |
| Query metric-data-v2 with rollup + time range |
| Slow/error/diagnostic snapshots with optional exit calls |
| Active/recent health rule violations |
| Anomaly violations + suspected causes |
| Event timeline (deployments, errors, custom, etc.) |
| List/inspect health rule definitions |
| Composite: policies + actions + schedules + health-rules |
| ADQL queries against the Events Service |
| Synthesized service dependency map |
Status
Phase 1: read-only MVP. All 12 tools are read-only against the public AppDynamics Controller, Alerting, Anomaly Violation, and Events Service APIs.
Limitations and non-goals
This is intentionally a small, focused project. The following are out of scope for the current release:
No write/change tools. Nothing in this server mutates AppDynamics state. Phase 3 will introduce write tools with per-tool allowlist + dryRun + confirm + audit gating; until then the server is provably read-only by construction.
No sensitive-read tools. Audit logs, RBAC details, and PII surfaces are deferred to Phase 2.
No on-prem auth modes yet. OAuth API-client credentials are the only auth path. Username + access-key, SAML federation, and on-prem proxy patterns are open questions in AGENT_BOOTSTRAP.md §8.
No Synthetic. AppDynamics Synthetic monitoring tools are not in this MVP.
No persistent server-side state. Caches are in-process LRU, resetting on restart.
No production hosting opinion. The intended deployment is per-developer, per-MCP-host (Cursor or Claude Desktop on a workstation). Multi-tenant, internet-facing deployment is not a goal.
See AGENT_BOOTSTRAP.md for the full phase roadmap.
Documentation
AGENT_BOOTSTRAP.md — canonical onboarding document (architecture, tool catalog, conventions, decision log, open questions). New devs/agents start here.
CONTRIBUTING.md — dev setup, conventions, how to add a tool, PR expectations.
SECURITY.md — vulnerability disclosure policy.
CODE_OF_CONDUCT.md — Contributor Covenant v2.1.
TRADEMARKS.md — independence statement and third-party trademark disclaimers.
NOTICE and THIRD_PARTY_NOTICES.md — attribution for ported upstream code (the setup wizard ports from the Apache-2.0
spl-bridgeproject).docs/wizard-pty-validation/ — archived POSIX-only PTY harness for hand-iterating wizard prompts; not part of CI.
Setup wizard
pnpm wizard runs an interactive wizard that drops you into a
working install in five steps:
Prerequisites — checks Node version, that
dist/index.jsexists, and that.envis writable. Detects Cursor / Claude Desktop installations.Collect — prompts for Controller URL, account name (auto-suggested from the URL's leftmost label), API Client ID, and API Client Secret. Optionally collects Events Service URL and key. Always re-prompts secrets across retries.
Probe — exercises the OAuth endpoint, lists applications via the Controller, and (if events were configured) issues a smoke ADQL. A failure shows the exact endpoint and offers Edit / Save-anyway / Quit, bounded to 3 attempts. A 500
Error provisioning account on any clusteron the Events probe degrades to SKIP (the tenant simply isn't entitled for Analytics) instead of failing the wizard.Persist — atomic-write
.envwith a timestamped.bak.<ISO>andchmod 0600. Pre-validates against the Zod runtime schema before writing.MCP host wiring — pick from
Cursor (project),Cursor (user), orPrint snippet only. The chosen target uses Cursor's nativeenvFilefield so no secrets land inmcp.json.
The wizard refuses to run when stdin is not a TTY (no piping
secrets) and rejects http:// URLs as a hard-stop. Exit codes:
0 success, 1 user-driven abort, 2 safety-gate decline /
non-TTY.
To verify a saved .env against the live Controller without
reconfiguring anything, run:
pnpm wizard-live-probeManual configuration
If you don't want to use pnpm wizard, all configuration is via
environment variables. See .env.example for the
full list. Required:
APPD_CONTROLLER_URL— the AppDynamics Controller base URL.APPD_ACCOUNT_NAME— your tenant name.APPD_API_CLIENT_ID/APPD_API_CLIENT_SECRET— OAuth API Client credentials (create in the Controller UI under Settings → Administration → API Clients).
Optional:
APPD_EVENTS_SERVICE_URL/APPD_EVENTS_API_KEY— only needed forappd_query_analytics_events.APPD_TIMEOUT_MS,APPD_LOG_LEVEL,APPD_TOOLS_ENABLED— tuning.
Then start the server directly:
node --env-file=.env dist/index.jsWiring into a host
Cursor (recommended path)
Cursor supports both workspace-scoped
(<repo>/.cursor/mcp.json, ships with the repo) and
user-scoped (~/.cursor/mcp.json, applies globally) MCP
config. For dev-on-this-repo use, the workspace scope is cleanest
because it uses Cursor's ${workspaceFolder} variable and Cursor's
native envFile support — no absolute paths.
<repo>/.cursor/mcp.json:
{
"mcpServers": {
"appdynamics": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/dist/index.js"],
"envFile": "${workspaceFolder}/.env"
}
}
}Then, in Cursor:
Run
pnpm install && pnpm buildonce, and create.env(see Manual configuration).Restart Cursor (or reload the window).
Open Settings → Tools & MCP (Cmd+Shift+J → Features → Model Context Protocol). Toggle the
appdynamicsserver on.The 12
appd_*tools become available to the agent. The agent will ask for confirmation before invoking them by default;Output → MCP Logsis the place to debug if a server fails to start.
This repo's default .gitignore excludes .cursor/, so
.cursor/mcp.json does not get committed — paste the snippet above
into your own checkout.
User-scoped config (~/.cursor/mcp.json) is functionally similar
but ${workspaceFolder} doesn't help, so use absolute paths there.
See the Cursor MCP docs for details.
pnpm wizard writes either of these for you.
Claude Desktop
Add to
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"appdynamics": {
"command": "node",
"args": [
"--env-file=/absolute/path/to/appd_mcp/.env",
"/absolute/path/to/appd_mcp/dist/index.js"
]
}
}
}Note that Claude Desktop does not currently honor an envFile
field, so absolute paths are required.
Development
pnpm install # one-time
pnpm lint # biome check
pnpm typecheck # tsc --noEmit
pnpm test # vitest run (uses undici.MockAgent — no live AppD calls)
pnpm test:watch # vitest in watch mode
pnpm build # tsc -p tsconfig.build.json → dist/
pnpm smoke # spawn dist/index.js, drive initialize + tools/list (no live AppD calls)
pnpm test:wizard # in-process behavioral spot-checks for the setup wizard (requires build)CI (GitHub Actions, see .github/workflows/ci.yml)
runs lint → typecheck → test → build → smoke → test:wizard →
pnpm audit --audit-level high on every push/PR to main.
Architecture, conventions, decision log, and open questions all live in AGENT_BOOTSTRAP.md. New agents/devs should start there.
Live integration testing
Once you have an AppDynamics tenant + API client credentials, you
can exercise all 12 tools end-to-end against a real Controller. The
integration runner spawns dist/index.js via the MCP client SDK
(the same transport Claude Desktop / Cursor use) and drives a
17-step scenario across health, per-app deep walk, alerting,
aggregation, skippable surfaces, and negative paths.
# 1. Drop creds into a local .env (gitignored) — or use `pnpm wizard`.
cp .env.example .env
# edit .env:
# APPD_CONTROLLER_URL=https://<tenant>.saas.appdynamics.com
# APPD_API_CLIENT_ID=<api-client-name>
# APPD_API_CLIENT_SECRET=<secret>
# 2. Confirm the controller's accountName by probing the OAuth endpoint.
# Tries the subdomain first (e.g. `<tenant>` for SaaS), then `customer1`.
# If APPD_ACCOUNT_NAME is already set, only that one is tried.
pnpm probe-account
# → prints `APPD_ACCOUNT_NAME=<resolved>` on success.
# 3. Build (ensures dist/ matches src/) and run the full integration walk.
pnpm build
pnpm integrationPer-step JSON artifacts and a combined report.json land under
tmp/integration/<ISO-timestamp>/ (gitignored). The runner also
captures the spawned server's stderr and asserts that the literal
APPD_API_CLIENT_SECRET value never appears in it (defense-in-depth
on top of the pino redaction unit tests).
The runner does not run in CI: it requires a long-lived secret and hits a live tenant. Run it locally before any release.
After a successful run, rotate the API client secret in the Controller UI (Administration → API Clients → Generate Secret) — especially if the credential ever transited a chat or shared terminal.
Security
No hardcoded secrets. All credentials via env vars.
OAuth tokens are never logged (pino redaction is mandatory).
stdio transport only — stdout reserved for MCP frames, logs go to stderr.
TLS verification on by default.
APPD_INSECURE_SKIP_VERIFY=trueexists for dev-only and must never be used in production.
For vulnerability disclosure, see SECURITY.md. The full list of conventions lives in AGENT_BOOTSTRAP.md §6 Conventions.
License
MIT. Portions of src/setup/ are ported
from the Apache-2.0 licensed
spl-bridge project;
see NOTICE and
THIRD_PARTY_NOTICES.md.
Available Tools
12 toolsappd_get_alerting_configGet AppDynamics alerting configurationA
Composite read: parallel-fetches health rules + policies + actions + schedules for one application via the Alerting REST v1 API. Use this for "what alerts and to whom" inventories.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it is a composite read performing parallel fetches via the Alerting REST v1 API. This gives the agent awareness of multiple API calls. It does not cover permissions or rate limits, but read-only nature is implied.
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 sentences: the first explains what the tool does, the second explains its use case. Every word contributes value, and the information is front-loaded. No unnecessary elaboration.
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 an output schema exists, return values do not need description. The description covers the composite nature, API used, and purpose. It lacks detail on potential heavy load or error handling, but overall is complete for an inventory read tool.
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 already provides a description for the 'application' parameter (name or numeric id). The tool description does not add any additional meaning beyond stating it operates on one application. With 0% schema_description_coverage (per context), the description should compensate, but it still meets the baseline.
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 it is a composite read that fetches health rules, policies, actions, and schedules for one application. It distinguishes from siblings like appd_list_health_rules which only fetch health rules, making the purpose specific and non-overlapping.
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 ends with 'Use this for "what alerts and to whom" inventories,' providing a clear context for its use. It does not explicitly mention when not to use it or alternatives, but the sibling tools imply those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_anomaly_violationsGet AppDynamics anomaly violationsB
Retrieve anomaly violations for an application within a time window. Set fetchSuspectedCause=true to include the suspected-cause RCA payload (eventDetailMap.{id}.suspectedCauses[]).
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. | |
| fetchSuspectedCause | No | When true, includes eventDetailMap.{id}.suspectedCauses[] for each violation. Heavier response. | |
| pageSize | No | ||
| pageNumber | No | 0-based page index. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It only discloses the behavioral impact of fetchSuspectedCause (heavier response), but omits other behavioral traits like read-only nature, permission requirements, rate limits, or pagination behavior. Significant gaps remain.
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 extremely concise at two sentences with zero wasted words. All critical information is front-loaded, and the fetchSuspectedCause detail is efficiently appended.
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 5 parameters including a complex timeRange union and pagination, the description fails to explain most parameters. It only covers fetchSuspectedCause. With an output schema present, return values are covered, but overall context for effective use is lacking.
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 description adds meaningful context for fetchSuspectedCause, explaining its effect on response size. However, with 60% schema description coverage and 5 parameters, the description does not compensate for undocumented parameters like pageSize or the timeRange structure in enough detail. Basic value added but insufficient.
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 'Retrieve anomaly violations for an application within a time window', clearly indicating the verb (retrieve) and resource (anomaly violations for an application). It distinguishes from the sibling tool 'appd_get_health_rule_violations' by focusing on anomaly violations versus health rule violations, though it does not explicitly name the sibling.
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 for retrieving anomaly violations within a time window, but it does not provide when-to-use or when-not-to-use guidance relative to siblings like 'appd_get_events' or 'appd_get_health_rule_violations'. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_application_modelGet AppDynamics application modelA
Fetch business transactions, tiers, nodes, and backends for one application in parallel. Anchor for nearly all RCA workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| include | No | Subset of model components to fetch (default: all four). Pass a non-empty array; omit to fetch every component. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the parallel fetching behavior, which is a key behavioral trait beyond the input schema. However, it does not mention any potential side effects, resource implications, or rate limits. Since no annotations are provided, the description carries the full burden for behavioral 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 two sentences: the first delivers the core functionality with action and scope, the second provides contextual importance. Every word earns its place, and the key information is front-loaded.
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?
The description covers the main purpose and hints at the tool's role in RCA workflows. While it does not explicitly mention prerequisites or usage order among siblings, the hint is sufficient given the output schema exists and the tool is relatively straightforward. The completeness is adequate but could be improved with more explicit linkage to other tools.
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 description mentions the component types (business transactions, tiers, nodes, backends) that correspond to the 'include' parameter enum values, but it does not add any new meaning beyond what is already in the schema. With schema coverage at 50%, the description partially reinforces the parameter semantics but does not compensate fully.
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 (fetch) and the resources (business transactions, tiers, nodes, backends) for one application, and highlights the parallel execution. It also positions the tool as an anchor for RCA workflows, distinguishing it from other tools that have more specific scopes.
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 context ('Anchor for nearly all RCA workflows') but does not explicitly specify when to use this tool versus its siblings, nor does it mention any prerequisites or exclusions. The guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_dependency_mapGet AppDynamics service dependency mapB
Synthesize a tier→tier/backend dependency map from the application model + transaction snapshots (with exit calls). MCP-level aggregation — confidence depends on snapshot density (warning surfaces when sparse).
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that confidence depends on snapshot density and that a warning surfaces when data is sparse, which is helpful. However, with no annotations, it does not state whether the operation is read-only or destructive, nor any side effects. More behavioral context would improve 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 two sentences: the first defines the core function, the second adds important behavioral nuance about confidence and warnings. It is concise, front-loaded, and every sentence serves a purpose.
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?
For a tool that synthesizes from model and snapshots, the description covers the transformation and output quality hint. With an output schema present, return value details are not needed. However, it lacks prerequisites (e.g., snapshots must exist) and any performance or resource considerations, leaving some gaps for a complex operation.
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 description does not add any information beyond the input schema. The schema already describes the parameters (application as name or id, timeRange with type and duration). Given 50% schema description coverage, the description missed an opportunity to clarify parameter usage or defaults beyond what the schema provides.
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 it synthesizes a tier→tier/backend dependency map from the application model and transaction snapshots, which is specific and differentiates it from sibling tools like appd_get_application_model or appd_get_transaction_snapshots. The mention of MCP-level aggregation and confidence dependence on snapshot density adds precision.
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 its siblings. The description does not mention prerequisites (e.g., needing transaction snapshots), alternatives, or exclusions. This leaves the agent without context to decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_eventsGet AppDynamics eventsB
Retrieve up to 600 events for an application by type and severity within a time window.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| eventTypes | Yes | AppD event types, e.g. APPLICATION_DEPLOYMENT, APPLICATION_ERROR, DIAGNOSTIC_SESSION, CUSTOM, RESOURCE_POOL_LIMIT_REACHED, etc. At least one required, up to 50. | |
| severities | Yes | At least one of INFO, WARN, ERROR. | |
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden of behavioral disclosure. It mentions the 600-event limit but omits details like pagination behavior, ordering, result format, or read-only nature. A mutation vs read distinction is not clarified.
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 of 17 words, efficiently front-loading the core action and filters. No redundant or unnecessary 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 complexity of the timeRange parameter (4 variants) and the presence of an output schema, the description lacks detail on how to construct the time range, what severity values mean, or any examples. It is too sparse for a tool with nested objects.
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 coverage is 75%, and the schema provides descriptions for most parameters. The description adds no additional semantic value beyond summarizing the filter criteria. Baseline of 3 is appropriate as the schema does the heavy lifting.
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 'retrieve', the resource 'events', and key filters (application, type, severity, time window). It also specifies a limit of 600 events. This distinguishes it from sibling tools which deal with alerts, violations, metrics, etc.
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 does not mention prerequisites, when not to use, or suggest sibling tools for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_health_rule_violationsGet AppDynamics health rule violationsA
Retrieve open / recently-closed health rule violations for an application within a time window.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It indicates a read-like operation ('Retrieve') but does not disclose side effects, authentication needs, rate limits, pagination, or any constraints beyond the time window. The description is minimal in behavioral context.
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, front-loaded with the verb, and contains no redundant information. Every word contributes to the purpose, making it highly concise and well-structured.
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?
The tool is moderately complex with 2 parameters and an output schema. The description covers the basic functionality but lacks details like default time range (though mentioned in schema), return format, or filtering capabilities. It is adequate but not 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?
Both parameters (application, timeRange) have detailed descriptions in the schema. The description adds no further meaning beyond the schema, as it only restates the overall purpose. With high schema description coverage, the description provides marginal added value for parameter semantics.
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 'Retrieve' and the resource 'open / recently-closed health rule violations for an application within a time window', which is specific and distinguishes from sibling tools like appd_list_health_rules (lists rules, not violations) and appd_get_anomaly_violations (different violation type).
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 for retrieving health rule violations but does not specify when to use this tool versus alternatives like appd_get_anomaly_violations or when not to use it. No explicit context or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_metric_hierarchyDiscover AppDynamics metric pathsA
Walk the metric hierarchy for one application. Without metricPath returns top-level folders; with metricPath returns the children at that level. Cached for 5 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| metricPath | No | Optional metric path to drill into, e.g. "Overall Application Performance|Average Response Time (ms)". Use the literal "|" character; the tool encodes it correctly. Leave unset to list root nodes. Max 2048 chars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses caching behavior (5 minutes) and explains the dual behavior based on parameter presence. It does not cover error conditions or rate limits, but given the missing annotations, it does reasonably well.
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 extremely concise—two sentences that pack essential information. No wasted words, and the purpose is front-loaded.
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 only 2 parameters (1 required) and an output schema exists, the description covers the core behavior and caching. It could mention pagination or error handling, but for a hierarchy-walking tool, it is sufficiently complete.
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 50%. The description adds meaningful context for the metricPath parameter, including an example and clarification on encoding. The application parameter is well-documented in the schema, so the description does not need to add more.
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 'walks the metric hierarchy' for one application and distinguishes behavior based on whether metricPath is provided: returns top-level folders without it, children at that level with it. This differentiates it from sibling tools like appd_query_metrics.
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 explicitly tells when to use the tool with and without the metricPath parameter. It does not mention when not to use it or suggest alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_get_transaction_snapshotsGet AppDynamics transaction snapshotsA
Retrieve slow/error/diagnostic transaction snapshots for an application. Default cap 100, hard max 600. Use needExitCalls=true to feed dependency-map analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. | |
| businessTransactionIds | No | ||
| tierIds | No | ||
| nodeIds | No | ||
| slowOnly | No | Only include snapshots flagged slow (deep-dive eligible). | |
| errorOnly | No | Only include snapshots with errors. | |
| firstInChain | No | Only return originating snapshots (not children). | |
| needExitCalls | No | Include exit calls (DB/HTTP/queue) per snapshot. Required for dependency-map synthesis. | |
| needProps | No | Include data-collector property fields per snapshot. | |
| maxResults | No | How many snapshots to request (default 100, max 600 per docs). |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description relies on itself to convey behavioral traits. It discloses capacity limits (cap 100, max 600) and a usage hint, but does not mention whether the operation is read-only, authentication needs, pagination, or response format. It provides some value but not comprehensive 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 two sentences, front-loaded with the core purpose, and includes key constraints and usage hint. Every word contributes value, making it concise and well-structured.
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 complexity with 11 parameters and an output schema, the description covers only capacity limits and one parameter's use case. It lacks guidance on common filters or response structure, leaving the agent needing to infer from the schema. It is minimally adequate but not fully complete.
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 description adds meaning for the needExitCalls parameter by linking it to dependency-map analysis, which is beyond the schema. However, with 64% schema coverage, many parameters already have descriptions; the description does not compensate fully for the undocumented ones. It adds moderate value.
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 'Retrieve' and the resource 'slow/error/diagnostic transaction snapshots for an application', making it specific. It also hints at a sibling tool (dependency map) for context, distinguishing its purpose.
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 a hint for when to use the needExitCalls parameter for dependency-map analysis, but does not explicitly state when to use this tool over alternatives or when not to use it. This leaves room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_list_applicationsList AppDynamics applicationsA
List business applications visible to the configured API Client. Optionally filter to apps that have been "alive" in the last N minutes (SaaS only).
| Name | Required | Description | Default |
|---|---|---|---|
| aliveWithinMinutes | No | SaaS-only: filter to applications that have been alive within the last N minutes (uses time-range-type=BEFORE_NOW). Omit to list all. Max 525600 (365 days). |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the scope (visible to configured API Client) and filter limitation (SaaS only), but does not mention pagination, rate limits, or output structure beyond what the output schema provides.
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 concise sentence that front-loads the core purpose and includes the optional filter with its constraint. No wasted words.
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?
For a simple list tool with one optional parameter and an existing output schema, the description is fairly complete. It covers the main functionality and filter conditions. Minor gaps include lack of mention of result ordering or limits, but overall adequate.
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 100%, and the tool description adds no additional meaning beyond the schema. The description reiterates the filter option but does not provide new insights into the parameter's semantics or usage.
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 it lists business applications visible to the configured API Client, with an optional alive filter. The verb 'list' and resource 'applications' are specific, and the description distinguishes from sibling 'get' tools that target specific items.
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 a usage condition for the filter (SaaS only) but does not explicitly state when not to use this tool or suggest alternative tools from the sibling list. The guidance is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_list_health_rulesList AppDynamics health rulesB
List health rule summaries (id, name, enabled) for an application via the Alerting REST v1 API. Optionally fan out to fetch full rule definitions.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| expandDetails | No | When true, fan out per-rule GETs to fetch full health rule definitions (in addition to the list summaries). Default false to keep the call cheap. | |
| maxDetailFanout | No | Cap on per-rule detail fetches when expandDetails=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions the API and optional fan-out for full definitions, but omits details like error handling, performance impact, or required permissions. Partial 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?
Two concise sentences, front-loaded with purpose and optional behavior. No extraneous 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?
Output schema exists, so return values need not be described. Tool is simple with 3 params, but lacks context on usage scenarios, limitations, or error states. Adequate but with notable gaps.
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 coverage is 67% and the description does not explain parameters individually. It hints at expandDetails with 'optionally fan out' but does not describe application or maxDetailFanout. Minimal added value beyond 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?
Description clearly states the tool lists health rule summaries (id, name, enabled) for an application via the Alerting REST v1 API, and optionally fetches full rule definitions. This is specific and distinguishes from siblings that deal with violations or other configs.
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 on when to use this tool versus alternatives like appd_get_health_rule_violations or appd_get_alerting_config. The description only states what it does, not when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_query_analytics_eventsQuery AppDynamics Analytics Events (ADQL)A
Run an ADQL query against the Events Service. Mode A: single ADQL string. Mode B: array of ≤20 query objects. Requires APPD_EVENTS_SERVICE_URL and APPD_EVENTS_API_KEY to be configured.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Single ADQL query string, e.g. "SELECT * FROM transactions WHERE eventTimestamp > 0". Max 8192 chars. | |
| queries | No | Multi-query mode: array of ADQL query objects (≤ 20). Mutually exclusive with `query`. | |
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. | |
| limit | No | Max rows to return (default 100). Single-query only; multi-query embeds limit per item. | |
| mode | No | Cursor mode. "scroll" not permitted in multi-query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the two modes and the need for env vars, but does not describe read/write nature, rate limits, pagination, or error handling. The description is adequate but not rich; the schema covers limits and mutual exclusion.
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 sentences, front-loaded with the main purpose, and contains no unnecessary words. It efficiently communicates the 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 presence of an output schema and high parameter coverage, the description does not need to explain return values. It covers the main purpose, modes, and prerequisites. Minor gaps: could clarify that limit is single-query only, but schema already states that.
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 100%, so the schema already documents all parameters. The tool description adds no additional meaning beyond mentioning two modes, which is already implied by the parameter descriptions. Baseline of 3 is appropriate.
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 (run an ADQL query), the resource (Events Service), and distinguishes two modes (single string vs array). It differentiates from sibling tools like appd_query_metrics by specifying ADQL against Events Service.
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?
It mentions two modes and prerequisites (env vars), but does not explicitly state when to use one mode over the other or contrast with sibling tools like appd_get_events. The context is clear but lacks explicit when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appd_query_metricsQuery AppDynamics metrics (metric-data-v2)A
Fetch one or more metric paths over a time range using metric-data-v2. Defaults to BEFORE_NOW 30 minutes with rollup=true. Surfaces granularity and long-window warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | ||
| metricPaths | Yes | One or more AppD metric paths, e.g. "Overall Application Performance|Average Response Time (ms)". Up to 20 paths fan out in parallel; each ≤ 2048 chars. | |
| timeRange | No | AppD time range. Defaults to BEFORE_NOW with durationMinutes=30 if omitted by the caller. | |
| rollup | No | When true (default), aggregates over the window. When false, returns the raw timeseries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| evidence | No | |
| entities | Yes | |
| timeRange | No | |
| sourceEndpoints | Yes | |
| pagination | No | |
| warnings | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses default behavior (BEFORE_NOW 30 minutes, rollup=true) and mentions surfacing granularity/long-window warnings. As a read operation without annotations, this provides adequate 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 extremely concise with three sentences, each providing essential information without redundancy.
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?
Combined with the output schema, the description covers key behavior, defaults, and warnings. It lacks mention of parallel path fan-out, but the schema covers that.
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 description adds value beyond the schema by specifying defaults and warning behavior. The schema already covers parameter descriptions, but the description enhances understanding with operational 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 tool fetches metric paths over a time range using metric-data-v2. It specifies the verb 'Fetch' and the resource 'metric paths', distinguishing it from siblings like appd_query_analytics_events.
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 explicit when-to-use or when-not-to-use guidance is given. However, the purpose is specific enough that agents can infer usage based on sibling tool names.
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. Dates show when Glama detected each change.
12 tool updates
v0.1.2- Changed
appd_get_alerting_config1 field changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +]
- Changed
appd_get_anomaly_violations2 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
- Changed
appd_get_application_model4 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / include / descriptionPrevious value: -"Subset of model components to fetch (default: all four)."New value: +"Subset of model components to fetch (default: all four). Pass a non-empty array; omit to fetch every component." - added
Input schema / properties / include / maxItemsAdded value: +4 - added
Input schema / properties / include / minItemsAdded value: +1
- Changed
appd_get_dependency_map2 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
- Changed
appd_get_events6 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / eventTypes / descriptionPrevious value: -"AppD event types, e.g. APPLICATION_DEPLOYMENT, APPLICATION_ERROR, DIAGNOSTIC_SESSION, CUSTOM, RESOURCE_POOL_LIMIT_REACHED, etc. At least one required."New value: +"AppD event types, e.g. APPLICATION_DEPLOYMENT, APPLICATION_ERROR, DIAGNOSTIC_SESSION, CUSTOM, RESOURCE_POOL_LIMIT_REACHED, etc. At least one required, up to 50." - added
Input schema / properties / eventTypes / items / maxLengthAdded value: +64 - added
Input schema / properties / eventTypes / maxItemsAdded value: +50 - added
Input schema / properties / severities / maxItemsAdded value: +3 - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
- Changed
appd_get_health_rule_violations2 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
- Changed
appd_get_metric_hierarchy4 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / metricPath / descriptionPrevious value: -"Optional metric path to drill into, e.g. \"Overall Application Performance|Average Response Time (ms)\". Use the literal \"|\" character; the tool encodes it correctly. Leave unset to list root nodes."New value: +"Optional metric path to drill into, e.g. \"Overall Application Performance|Average Response Time (ms)\". Use the literal \"|\" character; the tool encodes it correctly. Leave unset to list root nodes. Max 2048 chars." - added
Input schema / properties / metricPath / maxLengthAdded value: +2048 - added
Input schema / properties / metricPath / minLengthAdded value: +1
- Changed
appd_get_transaction_snapshots5 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - added
Input schema / properties / businessTransactionIds / maxItemsAdded value: +200 - added
Input schema / properties / nodeIds / maxItemsAdded value: +200 - added
Input schema / properties / tierIds / maxItemsAdded value: +200 - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
- Changed
appd_list_applications2 fields changed- changed
Input schema / properties / aliveWithinMinutes / descriptionPrevious value: -"SaaS-only: filter to applications that have been alive within the last N minutes (uses time-range-type=BEFORE_NOW). Omit to list all."New value: +"SaaS-only: filter to applications that have been alive within the last N minutes (uses time-range-type=BEFORE_NOW). Omit to list all. Max 525600 (365 days)." - added
Input schema / properties / aliveWithinMinutes / maximumAdded value: +525600
- Changed
appd_list_health_rules1 field changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +]
- Changed
appd_query_analytics_events3 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Single ADQL query string, e.g. \"SELECT * FROM transactions WHERE eventTimestamp > 0\""New value: +"Single ADQL query string, e.g. \"SELECT * FROM transactions WHERE eventTimestamp > 0\". Max 8192 chars." - added
Input schema / properties / query / maxLengthAdded value: +8192 - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
- Changed
appd_query_metrics4 fields changed- changed
Input schema / properties / application / anyOfPrevious value: -[ - { - "description": "Application name", - "minLength": 1, - "type": "string" - }, - { - "description": "Application numeric id", - "exclusiveMinimum": 0, - "type": "integer" - } -]New value: +[ + { + "description": "Application name (1–255 chars)", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "description": "Application numeric id", + "exclusiveMinimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / metricPaths / descriptionPrevious value: -"One or more AppD metric paths, e.g. \"Overall Application Performance|Average Response Time (ms)\". Up to 20 paths fan out in parallel."New value: +"One or more AppD metric paths, e.g. \"Overall Application Performance|Average Response Time (ms)\". Up to 20 paths fan out in parallel; each ≤ 2048 chars." - added
Input schema / properties / metricPaths / items / maxLengthAdded value: +2048 - changed
Input schema / properties / timeRange / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_NOW", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BEFORE_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "endTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "durationMinutes": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "AFTER_TIME", - "type": "string" - } - }, - "required": [ - "type", - "durationMinutes", - "startTimeMs" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "endTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "startTimeMs": { - "exclusiveMinimum": 0, - "type": "integer" - }, - "type": { - "const": "BETWEEN_TIMES", - "type": "string" - } - }, - "required": [ - "type", - "startTimeMs", - "endTimeMs" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "exclusiveMinimum": 0, + "maximum": 525600, + "type": "integer" + }, + "type": { + "const": "BEFORE_NOW", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "endTimeMs": { + "exclusiveMinimum": 0, + "maximum": 253402300799000, + "type": "integer" + }, + "type": { + "const": "BEFORE_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "endTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "durationMinutes": { + "$ref": "#/properties/timeRange/anyOf/0/properties/durationMinutes" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "AFTER_TIME", + "type": "string" + } + }, + "required": [ + "type", + "durationMinutes", + "startTimeMs" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "endTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "startTimeMs": { + "$ref": "#/properties/timeRange/anyOf/1/properties/endTimeMs" + }, + "type": { + "const": "BETWEEN_TIMES", + "type": "string" + } + }, + "required": [ + "type", + "startTimeMs", + "endTimeMs" + ], + "type": "object" + } +]
12 tool updates
v0.1.0- First observed
appd_get_alerting_config - First observed
appd_get_anomaly_violations - First observed
appd_get_application_model - First observed
appd_get_dependency_map - First observed
appd_get_events - First observed
appd_get_health_rule_violations - First observed
appd_get_metric_hierarchy - First observed
appd_get_transaction_snapshots - First observed
appd_list_applications - First observed
appd_list_health_rules - First observed
appd_query_analytics_events - First observed
appd_query_metrics
TDQS
Each tool targets a distinct AppDynamics resource or function (e.g., alerting config, anomaly violations, application model, dependency map, events, health rule violations, metric hierarchy, transaction snapshots, applications list, health rules list, analytics events, metrics query). No overlapping purposes; descriptions clearly differentiate the tools.
All tools follow a consistent 'appd_verb_noun' pattern in snake_case. Verbs are predominantly 'get', 'list', or 'query', applied appropriately to each operation. The naming is predictable and aids agent selection.
12 tools is well-scoped for an AppDynamics monitoring server. The set covers essential monitoring and RCA workflows without being overwhelming. Each tool serves a clear purpose and earns its place.
The tool surface covers key monitoring operations: application discovery, model, health rule violations, anomaly violations, events, metrics, transaction snapshots, dependencies, alerting config, health rules, metric hierarchy, and analytics events. Minor gaps exist (e.g., no tool for dashboard retrieval or detailed health rule by ID), but core workflows are fully supported.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
- dataOAuthco.thinair
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Related MCP Servers
- AlicenseCqualityAmaintenanceA comprehensive read-only MCP server for Datadog, providing 117 tools to query logs, APM, metrics, monitors, dashboards, SLOs, and more, with zero write capabilities for safe AI integration.1001,1062MIT
- FlicenseCqualityBmaintenanceA read-only MCP server for the Cisco Meraki Dashboard API that exposes 50 GET endpoints for understanding network topology from organization down to individual devices and ports.50-
- FlicenseBqualityBmaintenanceRead-only MCP server wrapping the Redash REST API, enabling query listing, execution, data source inspection, and dashboard retrieval with optional per-user API key support.7-
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server that provides tools to list and read devices, MDM servers, blueprints, configurations, apps, packages, users, and other resources from Apple Business Manager and Apple School Manager.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jagalliers/appd-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server