Skip to main content
Glama

Sources

onelence_list_sources
Read-onlyIdempotent

The traffic sources on a site with visitors, conversions, conversion rate and traffic share (ratios 0 to 1), and the posture of those on the decision board. Sources with a Decision come first in priority order, then acquisition, owned and utility sources. For sources ranked by visitors, or compared with the previous period, use onelence_get_breakdown with dimension=source (and compare=previous_period). Without start and end, counts cover the last 30 completed UTC days (see window), while onelence_get_breakdown runs up to now, so the two can differ slightly. A visitor who arrived from several sources counts under each. Use a source id with onelence_get_decision.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "onelence_list_sources"
  }
}

Input Schema

NameRequiredDescriptionDefault
endNoWindow end, inclusive for a date. Defaults to now.
siteNoSite domain (e.g. example.com) or site id. Defaults to the workspace's newest active site.
typeNo
groupNo
limitNoItems to return (default 25).
startNoWindow start: a date (YYYY-MM-DD) or ISO 8601 date-time. Defaults to 30 days before end.
cursorNonext_cursor from the previous call, for more.

Output Schema

NameRequiredDescriptionDefault
dataYes
moreNoHow to fetch the next page, when has_more.
objectYes
windowYes
has_moreYes
next_cursorYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "data": {
      +      "items": {
      +        "properties": {
      +          "channel": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "group": {
      +            "enum": [
      +              "decision",
      +              "acquisition",
      +              "owned",
      +              "utility"
      +            ],
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "metrics": {
      +            "properties": {
      +              "conversion_rate": {
      +                "anyOf": [
      +                  {
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "conversions": {
      +                "anyOf": [
      +                  {
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "traffic_share": {
      +                "anyOf": [
      +                  {
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "visitors": {
      +                "anyOf": [
      +                  {
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "visitors",
      +              "conversions",
      +              "conversion_rate",
      +              "traffic_share"
      +            ],
      +            "type": "object"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "object": {
      +            "const": "source",
      +            "type": "string"
      +          },
      +          "posture": {
      +            "anyOf": [
      +              {
      +                "enum": [
      +                  "scale",
      +                  "hold",
      +                  "stop"
      +                ],
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "role": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "type": {
      +            "enum": [
      +              "source",
      +              "affiliate"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "object",
      +          "id",
      +          "name",
      +          "type",
      +          "channel",
      +          "role",
      +          "group",
      +          "posture",
      +          "metrics"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "has_more": {
      +      "type": "boolean"
      +    },
      +    "more": {
      +      "description": "How to fetch the next page, when has_more.",
      +      "type": "string"
      +    },
      +    "next_cursor": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "object": {
      +      "const": "list",
      +      "type": "string"
      +    },
      +    "window": {
      +      "properties": {
      +        "end": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "start": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "start",
      +        "end"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "object",
      +    "data",
      +    "has_more",
      +    "next_cursor",
      +    "window"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds genuinely useful context beyond them: the default window is the last 30 completed UTC days while get_breakdown runs to now (so the two can diverge), a visitor arriving from multiple sources is counted under each, and results are ordered Decision-first then acquisition/owned/utility. The only omission is pagination behavior, which the cursor parameter implies.

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

Conciseness4/5

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

Front-loaded with the resource and its metrics before moving to routing guidance and window caveats; every sentence carries information. It is dense but not padded, though the parenthetical asides make single sentences long.

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?

For a read-only list tool with 7 optional parameters and an output schema, the description covers resource scope, default window semantics, double-counting caveat, ordering and sibling routing. Return-value explanation is correctly left to the output schema; only the affiliate type would still need a guess.

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?

With 71% schema description coverage the schema already documents start, end, site, limit and cursor, and the description mostly reinforces the window default rather than adding format detail. It does add meaning for group by disclosing the priority ordering of decision, acquisition, owned and utility, but the type enum (source/affiliate) is never explained in either place.

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?

Names the resource (traffic sources on a site) and the exact metrics returned (visitors, conversions, conversion rate, traffic share ratios 0-1), plus the decision-board posture. It explicitly distinguishes itself from onelence_get_breakdown with dimension=source, so an agent can route without opening either schema.

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?

Explicitly states when to use the sibling instead: ranked-by-visitors or period-over-period comparison goes to onelence_get_breakdown with dimension=source (and compare=previous_period). It also tells the agent to feed a returned source id into onelence_get_decision, closing the loop on downstream usage.

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.