Skip to main content
Glama
link0-o

PerfLens MCP Server

by link0-o

execute_collection_plan

Destructive

Execute a previously planned PID collection through the restricted collector broker to capture performance data. Plans are short-lived and single-use.

Instructions

Execute one previously planned PID collection through the restricted collector broker. Plans are short-lived and single-use.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
plan_idYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
uriYes
summaryYes
artifact_idYes
artifact_typeYes
schema_versionNo1.0
evidence_qualityNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changedv0.3.2
    • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_percent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Kernel Context Self Percent"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / kernel_context_self_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Kernel Context Self Weight"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_percent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unknown Context Self Percent"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unknown_context_self_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unknown Context Self Weight"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_percent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unresolved Kernel Self Percent"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_kernel_self_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unresolved Kernel Self Weight"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_percent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unresolved Unknown Context Self Percent"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_unknown_context_self_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unresolved Unknown Context Self Weight"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_percent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unresolved User Self Percent"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / unresolved_user_self_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Unresolved User Self Weight"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_percent
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 100,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "User Context Self Percent"
      +}
    • addedOutput schema / $defs / EvidenceQuality / properties / user_context_self_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "User Context Self Weight"
      +}
  2. Changed2 schema fields changedv0.3.0
    • addedOutput schema / $defs
      Added value: +{
      +  "EvidenceQuality": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "actual_event_source": {
      +        "default": "unknown",
      +        "enum": [
      +          "hardware",
      +          "software",
      +          "unknown"
      +        ],
      +        "title": "Actual Event Source",
      +        "type": "string"
      +      },
      +      "address_annotation_line_count": {
      +        "minimum": 0,
      +        "title": "Address Annotation Line Count",
      +        "type": "integer"
      +      },
      +      "aggregated_frame_occurrence_count": {
      +        "minimum": 0,
      +        "title": "Aggregated Frame Occurrence Count",
      +        "type": "integer"
      +      },
      +      "allowed_conclusions": {
      +        "default": [],
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Allowed Conclusions",
      +        "type": "array"
      +      },
      +      "call_graph_weight": {
      +        "minimum": 0,
      +        "title": "Call Graph Weight",
      +        "type": "integer"
      +      },
      +      "call_graph_weight_percent": {
      +        "maximum": 100,
      +        "minimum": 0,
      +        "title": "Call Graph Weight Percent",
      +        "type": "number"
      +      },
      +      "collection_limitations": {
      +        "default": [],
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Collection Limitations",
      +        "type": "array"
      +      },
      +      "duplicate_frame_line_count": {
      +        "minimum": 0,
      +        "title": "Duplicate Frame Line Count",
      +        "type": "integer"
      +      },
      +      "event": {
      +        "title": "Event",
      +        "type": "string"
      +      },
      +      "exported_call_path_count": {
      +        "minimum": 0,
      +        "title": "Exported Call Path Count",
      +        "type": "integer"
      +      },
      +      "exported_hotspot_count": {
      +        "minimum": 0,
      +        "title": "Exported Hotspot Count",
      +        "type": "integer"
      +      },
      +      "fallback_reason": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Fallback Reason"
      +      },
      +      "fallback_used": {
      +        "anyOf": [
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Fallback Used"
      +      },
      +      "forbidden_conclusions": {
      +        "default": [],
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Forbidden Conclusions",
      +        "type": "array"
      +      },
      +      "frame_line_count": {
      +        "minimum": 0,
      +        "title": "Frame Line Count",
      +        "type": "integer"
      +      },
      +      "inline_frame_count": {
      +        "minimum": 0,
      +        "title": "Inline Frame Count",
      +        "type": "integer"
      +      },
      +      "input_bytes": {
      +        "minimum": 0,
      +        "title": "Input Bytes",
      +        "type": "integer"
      +      },
      +      "input_sha256": {
      +        "pattern": "^[a-f0-9]{64}$",
      +        "title": "Input Sha256",
      +        "type": "string"
      +      },
      +      "limitations": {
      +        "default": [],
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Limitations",
      +        "type": "array"
      +      },
      +      "malformed_record_count": {
      +        "minimum": 0,
      +        "title": "Malformed Record Count",
      +        "type": "integer"
      +      },
      +      "normalization_merge_count": {
      +        "minimum": 0,
      +        "title": "Normalization Merge Count",
      +        "type": "integer"
      +      },
      +      "omitted_call_path_weight": {
      +        "minimum": 0,
      +        "title": "Omitted Call Path Weight",
      +        "type": "integer"
      +      },
      +      "omitted_hotspot_self_weight": {
      +        "minimum": 0,
      +        "title": "Omitted Hotspot Self Weight",
      +        "type": "integer"
      +      },
      +      "parser_invariants_passed": {
      +        "title": "Parser Invariants Passed",
      +        "type": "boolean"
      +      },
      +      "quality_status": {
      +        "enum": [
      +          "verified",
      +          "partial"
      +        ],
      +        "title": "Quality Status",
      +        "type": "string"
      +      },
      +      "sample_count": {
      +        "minimum": 0,
      +        "title": "Sample Count",
      +        "type": "integer"
      +      },
      +      "schema_version": {
      +        "const": "1.0",
      +        "default": "1.0",
      +        "title": "Schema Version",
      +        "type": "string"
      +      },
      +      "source_annotation_line_count": {
      +        "minimum": 0,
      +        "title": "Source Annotation Line Count",
      +        "type": "integer"
      +      },
      +      "source_collection_artifact_sha256": {
      +        "anyOf": [
      +          {
      +            "pattern": "^[a-f0-9]{64}$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Source Collection Artifact Sha256"
      +      },
      +      "source_collection_id": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Source Collection Id"
      +      },
      +      "source_line_frame_count": {
      +        "minimum": 0,
      +        "title": "Source Line Frame Count",
      +        "type": "integer"
      +      },
      +      "source_line_self_percent": {
      +        "maximum": 100,
      +        "minimum": 0,
      +        "title": "Source Line Self Percent",
      +        "type": "number"
      +      },
      +      "source_line_self_weight": {
      +        "minimum": 0,
      +        "title": "Source Line Self Weight",
      +        "type": "integer"
      +      },
      +      "source_locations_truncated_hotspot_count": {
      +        "minimum": 0,
      +        "title": "Source Locations Truncated Hotspot Count",
      +        "type": "integer"
      +      },
      +      "total_call_path_count": {
      +        "minimum": 0,
      +        "title": "Total Call Path Count",
      +        "type": "integer"
      +      },
      +      "total_hotspot_count": {
      +        "minimum": 0,
      +        "title": "Total Hotspot Count",
      +        "type": "integer"
      +      },
      +      "total_weight": {
      +        "minimum": 0,
      +        "title": "Total Weight",
      +        "type": "integer"
      +      },
      +      "unicode_replacement_count": {
      +        "minimum": 0,
      +        "title": "Unicode Replacement Count",
      +        "type": "integer"
      +      },
      +      "unresolved_self_percent": {
      +        "maximum": 100,
      +        "minimum": 0,
      +        "title": "Unresolved Self Percent",
      +        "type": "number"
      +      },
      +      "unresolved_self_weight": {
      +        "minimum": 0,
      +        "title": "Unresolved Self Weight",
      +        "type": "integer"
      +      },
      +      "warning_count": {
      +        "minimum": 0,
      +        "title": "Warning Count",
      +        "type": "integer"
      +      },
      +      "warnings_truncated": {
      +        "title": "Warnings Truncated",
      +        "type": "boolean"
      +      },
      +      "weight_source": {
      +        "title": "Weight Source",
      +        "type": "string"
      +      },
      +      "weight_unit": {
      +        "title": "Weight Unit",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "quality_status",
      +      "parser_invariants_passed",
      +      "input_sha256",
      +      "input_bytes",
      +      "sample_count",
      +      "total_weight",
      +      "event",
      +      "weight_unit",
      +      "weight_source",
      +      "malformed_record_count",
      +      "warning_count",
      +      "warnings_truncated",
      +      "unicode_replacement_count",
      +      "frame_line_count",
      +      "duplicate_frame_line_count",
      +      "address_annotation_line_count",
      +      "source_annotation_line_count",
      +      "aggregated_frame_occurrence_count",
      +      "unresolved_self_weight",
      +      "unresolved_self_percent",
      +      "call_graph_weight",
      +      "call_graph_weight_percent",
      +      "source_line_frame_count",
      +      "source_line_self_weight",
      +      "source_line_self_percent",
      +      "inline_frame_count",
      +      "normalization_merge_count",
      +      "source_locations_truncated_hotspot_count",
      +      "total_hotspot_count",
      +      "exported_hotspot_count",
      +      "omitted_hotspot_self_weight",
      +      "total_call_path_count",
      +      "exported_call_path_count",
      +      "omitted_call_path_weight"
      +    ],
      +    "title": "EvidenceQuality",
      +    "type": "object"
      +  }
      +}
    • addedOutput schema / properties / evidence_quality
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/EvidenceQuality"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  3. Addedv0.1.1

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructive, non-idempotent behavior, and the description adds beyond that by disclosing that the plan is consumed after one use and that a restricted broker is involved. This gives the agent useful operational context about side effects and access constraints without contradicting the annotations.

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?

The description is a single sentence with no filler. It front-loads the verb and object, then adds the two most important operational constraints: the restricted broker and the short-lived/single-use nature of plans.

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?

For a one-parameter destructive action with an output schema and relevant annotations, the description covers plan lifecycle and access restrictions well. The main minor gap is that the term 'PID' is not expanded, but the simple input and presence of an output schema keep this from being a significant completeness issue.

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?

The schema only exposes a required string plan_id with the title 'Plan Id', and schema description coverage is 0%. The description adds lifecycle meaning by characterizing the plan as previously planned, short-lived, and single-use, but it does not explicitly say how to obtain the plan_id or what format it takes. This is adequate for a single simple parameter but not fully compensating for zero schema coverage.

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

Purpose5/5

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

The description identifies a specific action ('Execute'), a specific object ('one previously planned PID collection'), and a distinguishing delivery mechanism ('restricted collector broker'). It clearly differentiates this tool from planning and direct collection siblings by emphasizing that execution applies only to previously planned, single-use plans.

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 states the tool is appropriate only for collections that were previously planned, and adds that plans are short-lived and single-use, implying the agent should not attempt to reuse a plan. It does not explicitly name an alternative tool for creating plans, but the context is clear enough for correct selection.

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