Skip to main content
Glama

AI Agent Analytics

Get Portfolio Pulse

get_portfolio_pulse
Read-onlyIdempotent

Return cross-product Portfolio Pulse for the bearer token's organization. Use this for organization-wide comparison; do not use it for one product/day, use get_daily_pulse, or for one product over a date window, use get_report. Takes no parameters because organization scope comes from the token. Requires portfolio:read; the same actor may count in more than one product, invalid or expired authority fails closed, and the shared MCP limit is 300 calls per 60 seconds per caller before HTTP 429 with Retry-After.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
schemaYesDelegated portfolio response schema identifier.
portfolioYes
organizationYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / properties / organization / properties / id / description
      Previous value: -"Authorized organization ID."New value: +"Authorized organization ID selected by the bearer token."
    • addedOutput schema / properties / portfolio / additionalProperties
      Added value: +{}
    • removedOutput schema / properties / portfolio / description
      Removed value: -"Organization-wide Portfolio Pulse with evidence-backed per-product metrics."
    • addedOutput schema / properties / portfolio / properties
      Added value: +{
      +  "generated_at": {
      +    "description": "UTC timestamp when this portfolio view was generated.",
      +    "type": "string"
      +  },
      +  "integrity": {
      +    "additionalProperties": {},
      +    "description": "Important interpretation limits for portfolio aggregation.",
      +    "properties": {
      +      "cross_property_actor_deduplication": {
      +        "description": "False: the same actor may appear in more than one product.",
      +        "type": "boolean"
      +      },
      +      "real_agent_semantics": {
      +        "type": "string"
      +      },
      +      "repeat_agent_semantics": {
      +        "type": "string"
      +      },
      +      "revenue_semantics": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "cross_property_actor_deduplication",
      +      "real_agent_semantics",
      +      "repeat_agent_semantics",
      +      "revenue_semantics"
      +    ],
      +    "type": "object"
      +  },
      +  "metrics": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "agent_revenue": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Settled minor-unit amounts keyed by an exact currency/asset/network identity; unlike money is never combined.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "converted_agent_signals": {
      +        "description": "Sum of property-level converted-agent signals.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "paid_intent": {
      +        "description": "Sum of property-level paid-intent counts.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "real_agent_signals": {
      +        "description": "Sum of property-level Real Agent counts; not cross-product unique actors.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "repeat_agent_signals": {
      +        "description": "Sum of property-level repeat-agent signals.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "successful_delivery": {
      +        "description": "Count of successful paid deliveries across products.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "real_agent_signals",
      +      "paid_intent",
      +      "converted_agent_signals",
      +      "successful_delivery",
      +      "repeat_agent_signals",
      +      "agent_revenue"
      +    ],
      +    "type": "object"
      +  },
      +  "products": {
      +    "description": "Per-product pulse summaries.",
      +    "items": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "biggest_opportunity": {
      +          "description": "Largest evidence-backed opportunity or next observation.",
      +          "type": "string"
      +        },
      +        "confidence": {
      +          "description": "Evidence confidence label.",
      +          "type": "string"
      +        },
      +        "day": {
      +          "description": "Product-local day when available.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "has_activity": {
      +          "description": "Whether any meaningful observed activity is present.",
      +          "type": "boolean"
      +        },
      +        "metrics": {
      +          "additionalProperties": {},
      +          "description": "Six product-level machine-customer metrics.",
      +          "properties": {
      +            "agent_revenue": {
      +              "additionalProperties": {
      +                "type": "string"
      +              },
      +              "description": "Settled minor-unit amounts keyed by an exact currency/asset/network identity; unlike money is never combined.",
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "converted_agents": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "paid_intent": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "real_agents": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "repeat_agents": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "successful_delivery": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "real_agents",
      +            "paid_intent",
      +            "converted_agents",
      +            "successful_delivery",
      +            "repeat_agents",
      +            "agent_revenue"
      +          ],
      +          "type": "object"
      +        },
      +        "name": {
      +          "description": "Display name.",
      +          "type": "string"
      +        },
      +        "observed_funnel": {
      +          "additionalProperties": {
      +            "type": "number"
      +          },
      +          "description": "Observed funnel event counts by stage.",
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "property_id": {
      +          "description": "Product/property ID.",
      +          "type": "string"
      +        },
      +        "state": {
      +          "description": "Pulse availability state.",
      +          "type": "string"
      +        },
      +        "time_zone": {
      +          "description": "Product IANA time zone.",
      +          "type": "string"
      +        },
      +        "unresolved_external_events": {
      +          "description": "External events not promoted into verified agent metrics.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "what_happened": {
      +          "description": "Evidence-grounded activity summary.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "property_id",
      +        "name",
      +        "state",
      +        "day",
      +        "time_zone",
      +        "what_happened",
      +        "biggest_opportunity",
      +        "confidence",
      +        "metrics",
      +        "observed_funnel",
      +        "unresolved_external_events",
      +        "has_activity"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "products_total": {
      +    "description": "Number of active products included.",
      +    "maximum": 9007199254740991,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "products_with_activity": {
      +    "description": "Products with observed activity in the current pulse.",
      +    "maximum": 9007199254740991,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "schema_version": {
      +    "description": "Portfolio Pulse schema version.",
      +    "type": "string"
      +  },
      +  "state": {
      +    "description": "Portfolio aggregation state; currently live_partial for live views.",
      +    "type": "string"
      +  },
      +  "story": {
      +    "description": "Plain-language summary derived only from observed portfolio evidence.",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / portfolio / required
      Added value: +[
      +  "schema_version",
      +  "generated_at",
      +  "state",
      +  "products_total",
      +  "products_with_activity",
      +  "metrics",
      +  "story",
      +  "products",
      +  "integrity"
      +]
    • addedOutput schema / properties / portfolio / type
      Added value: +"object"
    • changedOutput schema / properties / schema / description
      Previous value: -"Response schema identifier."New value: +"Delegated portfolio response schema identifier."
  2. Changed4 schema fields changed
    • addedInput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / description
      Added value: +"This tool takes no parameters."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "organization": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "id": {
      +          "description": "Authorized organization ID.",
      +          "type": "string"
      +        },
      +        "name": {
      +          "description": "Authorized organization name.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "name"
      +      ],
      +      "type": "object"
      +    },
      +    "portfolio": {
      +      "description": "Organization-wide Portfolio Pulse with evidence-backed per-product metrics."
      +    },
      +    "schema": {
      +      "description": "Response schema identifier.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "schema",
      +    "organization",
      +    "portfolio"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds valuable context beyond those: the required scope 'portfolio:read', the non-exclusive counting of actors across products, fail-closed behavior on invalid/expired authority, and the shared rate limit (300 calls/60s) with HTTP 429 and Retry-After. No contradiction with 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 three sentences, each densely informative: purpose and scope, usage exclusions with alternatives, and behavioral/rate-limit caveats. Nothing is redundant; every sentence earns its place, and the most important differentiator (cross-product scope) is front-loaded.

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

Completeness5/5

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

Given the tool has no parameters and an output schema is present (so return format is documented elsewhere), the description covers all operational essentials: scope derivation, when to use it vs. siblings, required permission, actor-counting behavior, fail-closed semantics, and rate limiting. Nothing an agent needs to call it correctly is missing.

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

Parameters5/5

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

With zero parameters, the schema simply states 'This tool takes no parameters.' The description enriches this by explaining why there are none: 'organization scope comes from the token.' This adds meaning beyond the schema and removes any doubt about intended invocation.

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 states a specific verb ('Return'), a precise resource ('cross-product Portfolio Pulse'), and the scope ('for the bearer token's organization'). It explicitly distinguishes from siblings by naming get_daily_pulse and get_report for narrower queries, making the tool's role unambiguous.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ('Use this for organization-wide comparison') and clear exclusions ('do not use it for one product/day, use get_daily_pulse, or for one product over a date window, use get_report'), naming the exact alternative tools. This leaves no ambiguity about selection.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources