LTS MCP Server
Server Details
A Model Context Protocol server that provides Philippine License to Sell (LTS) verification data to LLMs. Built on Cloudflare Workers with Supabase.
Public, read-only, no authentication required. Data sourced from the Department of Human Settlements and Urban Development (DHSUD) License to Sell registry and cross-referenced with published real estate projects on REN.PH.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
12 toolslts_by_cityAInspect
Rank cities by LTS count with province, region, law breakdown, active/expired/unknown split (unknown = no expiry date on record, not lapsed), and top developer per city. Groups by city+province to avoid merging same-name cities across provinces. Use for housing pressure indices, city-level market analysis, and identifying emerging development hotspots. Cross-reference with PSGC MCP for city classification and population. Capped at 25k rows; check truncated flag and narrow filters if true.
| Name | Required | Description | Default |
|---|---|---|---|
| law | No | Filter by housing law: BP220 (socialized/economic) or PD957 (open market) | |
| year | No | Filter by LTS issue year | |
| limit | No | Max cities to return, sorted by count desc | |
| region | No | Filter to a specific DHSUD region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and delivers: the 'unknown = no expiry date on record, not lapsed' semantic clarification, the city+province grouping rationale, and the 25k row cap with truncated-flag instruction. These go well beyond what the schema or annotations could convey.
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?
Five sentences, each earning its place: purpose and output composition, grouping behavior, use cases, cross-reference advice, and an operational warning. Information is front-loaded with the core ranking statement first and no filler.
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 with no annotations and no output schema, the description is remarkably complete: it describes the return composition, the grouping key, the meaning of the unknown status, the row cap with a follow-up action, and target use cases. Nothing an agent needs to select or invoke this tool correctly is left unexplained.
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 100%, so all four parameters (law, year, limit, region) are already documented and baseline is 3. The description adds only general operational guidance ('narrow filters if true') rather than param-specific semantic detail, so it does not exceed 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 opens with a specific verb and resource — 'Rank cities by LTS count' — and enumerates the output dimensions (province, region, law breakdown, active/expired/unknown split, top developer). The city-centric aggregation clearly distinguishes it from siblings like lts_by_developer, lts_by_law, and lts_by_region.
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?
States explicit use cases — housing pressure indices, city-level market analysis, emerging development hotspots — and adds cross-referencing guidance with PSGC MCP. It lacks explicit when-not-to-use conditions or named sibling alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_by_developerAInspect
Rank developers by LTS count with regional footprint, law breakdown, and active/expired/unknown split (unknown = no expiry date on record, not lapsed). Use for developer intelligence, competitive analysis, and identifying which developers dominate specific regions or housing segments. Capped at 25k rows; check truncated flag and narrow filters if true.
| Name | Required | Description | Default |
|---|---|---|---|
| law | No | Filter by housing law: BP220 (socialized/economic) or PD957 (open market) | |
| year | No | Filter by LTS issue year | |
| limit | No | Max developers to return, sorted by count desc | |
| region | No | Filter to a specific DHSUD region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries disclosure duties. It surfaces important behavioral details: the 'unknown' status definition ('no expiry date on record, not lapsed') and the 25k row cap with the instruction to check the truncated flag and narrow filters. This is substantial, though it doesn't address authorization, rate limits, or exact output shape.
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?
Three tight sentences, each earning its place: output definition, use case, and a concrete limit warning. The core verb and purpose are front-loaded, with no filler.
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 with no output schema or annotations, the description conveys the result dimensions (counts, regions, laws, status split) and the truncation behavior. It could be more explicit about the exact return fields, but the essentials for calling it correctly are present.
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 has 100% description coverage, with each parameter already bounded and described. The description adds only a generic hint to 'narrow filters,' which doesn't enrich any specific parameter beyond the 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?
The description opens with a concrete verb and target: 'Rank developers by LTS count,' and specifies the output components (regional footprint, law breakdown, status split). It does not explicitly contrast with sibling tools like lts_by_region or lts_by_city, so it misses the top score for sibling differentiation.
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 states clear intended use cases: 'developer intelligence, competitive analysis, and identifying which developers dominate specific regions or housing segments.' It lacks explicit when-not-to-use or alternative tool guidance, so it stays a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_by_lawAInspect
Break down LTS records by housing law (BP220 socialized/economic vs PD957 open market). Shows regional distribution per law and year-over-year shift in BP220 share (when no year filter). Use for housing policy analysis and socialized housing supply tracking. Capped at 25k rows; check truncated flag and narrow filters if true.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by LTS issue year. Omit for YOY shift calculation | |
| region | No | Filter to a specific DHSUD region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so well. It reveals the 25k row cap, the truncated flag, the advice to narrow filters, and the conditional YOY calculation—details that are not visible in the input schema.
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?
Three sentences, each earning its place: purpose, use case, and operational caveat. The description is front-loaded with the core function and contains no filler or redundant jargon.
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?
Despite having no annotations or output schema, the description provides sufficient context for an agent to decide when to call this tool and interpret potential output flags. It covers the tool's analytical purpose, the conditional behavior without a year filter, and the row cap/truncation handling—making it complete for a 2-parameter, 0-required 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 100% coverage for both parameters, so the baseline is 3. The description does not add new parameter-specific details beyond the schema; it merely restates the year-omit behavior that the schema already documents.
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 immediately states the tool's function with a specific verb ('Break down') and resource ('LTS records by housing law'), and explicitly distinguishes the two law categories (BP220 vs PD957). This clearly differentiates it from sibling tools like lts_by_city or lts_by_region.
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?
Provides clear usage context: 'Use for housing policy analysis and socialized housing supply tracking.' It also explains the conditional year-over-year shift when no year filter is applied. However, it does not explicitly state when not to use this tool or name alternative sibling tools for exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_by_regionAInspect
Aggregate LTS records by DHSUD region. Returns count, market share, law breakdown (BP220/PD957), and active/expired/unknown split per region (unknown = no expiry date on record, not lapsed). Use for State of RE reports and regional housing market analysis. Cross-reference with PSGC MCP search for population data to compute per-capita density. Capped at 25k rows; check truncated flag and narrow filters if true.
| Name | Required | Description | Default |
|---|---|---|---|
| law | No | Filter by housing law: BP220 (socialized/economic) or PD957 (open market) | |
| year | No | Filter by LTS issue year | |
| status | No | Filter by derived LTS status: active (expiry >= today), expired (expiry < today), or unknown (no expiry date on record). Records with no expiry date are NOT counted as expired |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the meaning of 'unknown' status ('no expiry date on record, not lapsed'), discloses the 25k row cap, and instructs the agent to check the truncated flag and narrow filters when truncation occurs. It does not explicitly state read-only behavior, but 'Aggregate' and 'Returns' strongly imply a non-mutating query.
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 front-loaded with the core purpose and then flows logically through outputs, use cases, cross-reference, and limitations. Every sentence adds useful information, though the PSGC cross-reference tip is a helpful extra rather than essential for correct invocation, preventing a 5.
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?
Despite lacking an output schema, the description covers return values, the meaning of unknown status, row limits, and truncation handling. It does not specify exact field names, region definitions, or behavior when no filters are applied, but for a query tool with three optional filters this is a solid, actionable context.
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 baseline is 3. The description adds minimal parameter meaning beyond the schema: it mentions law breakdown and status split, but the schema already documents the law enum, year range, and status semantics, including the 'not counted as expired' clarification. The 'narrow filters' advice is generic and does not teach parameter-specific 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 opens with a specific verb and resource: 'Aggregate LTS records by DHSUD region.' It then enumerates the exact outputs (count, market share, law breakdown, status split), making the tool's function unambiguous. The regional grouping plus 'regional housing market analysis' clearly distinguishes it from sibling lts_by_city, lts_by_developer, and lts_by_law tools.
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 states when to use it: 'Use for State of RE reports and regional housing market analysis.' It does not explicitly name alternatives or give exclusion criteria, but the regional context is clear enough to route an agent correctly alongside the sibling by_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_checkAInspect
Check if a specific LTS number exists in the system. Returns whether it exists in lts_records, in project_lts, or both. Includes full record details when found.
| Name | Required | Description | Default |
|---|---|---|---|
| ltsNumber | Yes | The LTS number to look up (e.g., 'LS 0001234') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It explicitly discloses the return behavior (whether the number exists in lts_records, project_lts, or both) and promises full record details when found. This gives an agent clear expectations, though it does not explicitly state that the operation is read-only or describe error behavior.
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—three short sentences that each add distinct information (purpose, sources checked, output details). It is front-loaded with the primary action and contains no redundant or ambiguous wording.
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 lookup with one parameter and no output schema, the description covers the essential aspects: what it does, which sources it checks, and what it returns when found. It does omit specifics about the 'not found' return format or any error conditions, but it is sufficiently complete for an agent to invoke the tool correctly.
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 100% coverage for the single parameter ltsNumber, including an example format. The description only restates 'specific LTS number' and adds no new semantic details, so it meets the baseline but does not extend it.
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 a specific action (check if a specific LTS number exists), the resources involved (lts_records, project_lts), and the output (existence status and full record details). This distinguishes it from sibling tools that search by city, developer, law, etc., making the purpose unmistakable.
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 when an exact LTS number is known and existence needs verification, but it does not explicitly state when to choose this tool over alternatives like lts_search or lts_by_*. There is no mention of when not to use it or direct comparisons to sibling tools, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_expiry_riskAInspect
Find LTS records expiring within a given number of days. Returns records sorted by urgency (soonest first) with days remaining, plus summary counts by region and developer. Use for compliance monitoring, renewal pipeline tracking, and risk assessment. Capped at 25k rows; check truncated flag and narrow filters if true.
| Name | Required | Description | Default |
|---|---|---|---|
| law | No | Filter by housing law: BP220 (socialized/economic) or PD957 (open market) | |
| days | No | Look-ahead window in days from today (default 90) | |
| region | No | Filter to a specific DHSUD region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses key behaviors: sorting by urgency, returning days remaining, providing summary counts by region/developer, and a 25k row cap with a truncated flag and advice to narrow filters. This exceeds typical disclosure and gives the agent critical operational knowledge.
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?
Three sentences, each earning its place: purpose/returns, use cases, and capacity warning. The description is front-loaded and free of fluff.
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?
Despite no output schema, the description explains return structure (sorted, days remaining, summary counts, truncated flag) and operational limits (cap, filter advice). It's complete for a tool of this complexity.
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 schema covers 100% of parameters, so baseline is 3. The description adds context by linking the 'days' parameter to the expiry window and mentioning 'narrow filters,' which implicitly describes how to use region/law parameters. It reinforces but doesn't duplicate schema 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 finds LTS records expiring within a specified timeframe, using a specific verb ('Find') and resource ('LTS records'). It differentiates from sibling tools by emphasizing expiry risk, urgency sorting, and summary counts, making its purpose distinct.
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 explicitly names use cases: 'compliance monitoring, renewal pipeline tracking, and risk assessment.' While it doesn't mention alternative tools or exclusions, the context is clear and sufficient for an agent to decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_filtersAInspect
Get available filter values for LTS queries. Returns distinct regions and cities from the verification queue. Optionally filter cities by region. Use this before calling lts_queue or lts_search with region/city filters to get valid values.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | If provided, only return cities within this region |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses that the tool returns distinct regions and cities from the verification queue, optionally filtered by region. This gives useful behavioral context beyond a simple 'get filters' statement, though it doesn't describe the output format or edge cases.
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 four concise, purposeful sentences. It front-loads the purpose, then covers the resource, optional parameter, and usage guidance with no redundancy or filler.
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 tool with one optional parameter and no output schema, the description is largely complete. It covers purpose, usage, and parameter semantics. However, it omits the response structure (e.g., whether the result is an array or an object), which would be useful given no output schema is present.
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 schema covers the region parameter, but the description adds semantic value by clarifying that regions are always returned while the region parameter filters only the cities. This goes beyond the schema's description of 'only return cities within this region.'
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's function: 'Get available filter values for LTS queries.' It specifies the resource (LTS queries) and the output (distinct regions and cities from the verification queue), distinguishing it from sibling data-query tools like lts_search or lts_by_region.
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 gives explicit usage context: 'Use this before calling lts_queue or lts_search with region/city filters to get valid values.' It names alternatives and specifies the timing, satisfying the requirement for when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_projectAInspect
Get the complete LTS picture for a single project: all LTS records with computed fields (is_expired, days_until_expiry), summary counts, and the primary LTS number. Pass either a project UUID or a project name (fuzzy matched).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Project UUID. Takes priority over projectName if both provided | |
| projectName | No | Project name or slug for fuzzy lookup. Matched as a literal substring; use * as a wildcard. A term of only wildcards matches nothing. Use when you don't have the UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses what the call returns (records, computed fields, summary counts, primary number), but does not disclose edge-case behavior for fuzzy matching — such as what happens when a name matches multiple projects or nothing at all. These are material behaviors for an agent relying solely on this text.
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 sentences, with the core purpose and return contents front-loaded in the first sentence. The second sentence is somewhat redundant with the schema's parameter documentation, so it does not strictly earn its place, which prevents a 5, but overall the description is tight and well-ordered.
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?
With no output schema and no annotations, the description must convey the return shape, and it does name the key outputs. However, it omits no-match/ambiguous-match behavior and does not describe the structure or size of the returned record set, leaving an agent guessing about edge-case outcomes.
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 100%, so the baseline is 3: both parameters are already fully documented, including the projectId priority rule, substring matching, wildcard semantics, and the no-wildcard-only rule. The description's 'Pass either a project UUID or a project name (fuzzy matched)' adds no meaning beyond the schema, merely summarizing it.
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 uses a specific verb ('Get') and precise resource ('the complete LTS picture for a single project'), and enumerates the return contents: LTS records with computed fields (is_expired, days_until_expiry), summary counts, and the primary LTS number. This clearly distinguishes it from the dimension-scoped siblings (lts_by_city, lts_by_developer, lts_by_law, lts_by_region) and from lts_records/lts_search, which are not the complete single-project picture.
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 'for a single project' phrasing provides clear context for the intended scenario, and the schema adds a 'Use when you don't have the UUID' hint for projectName. However, with 11 siblings, the description never explicitly states when to choose this over lts_check, lts_records, lts_search, or lts_stats, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_recordsAInspect
Browse LTS records from DHSUD with filters. Shows normalized records with confidence levels. Filter by confidence (high/medium), linked status (has project_id), region, or text search. Use expiringWithinDays to find records expiring soon.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results | |
| linked | No | true = linked to project, false = unlinked | |
| offset | No | Pagination offset | |
| region | No | Filter by region (use lts_filters to get valid values) | |
| search | No | Text search: project name, LTS number, or developer. Matched as a literal substring; use * as a wildcard. A term of only wildcards matches nothing | |
| sortBy | No | Sort field | created_at |
| sortOrder | No | Sort direction | desc |
| confidence | No | Filter by data confidence level | |
| expiringWithinDays | No | Show records with expiry date within N days from today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It communicates that the tool is a read-oriented browse operation and that the output consists of normalized records with confidence levels. It does not mention pagination behavior, sort defaults, authorization requirements, or what happens when filters return no results, but for a browse tool this is a minimally acceptable disclosure.
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 three sentences with no filler. The main purpose is front-loaded, the output nature is stated, and the key filtering capabilities are summarized efficiently. Every sentence earns its place.
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 core browsing and filtering behavior but omits several operational details that matter given the 9 parameters and no output schema: pagination defaults, sort options, and the shape of returned records beyond 'normalized.' It is sufficient for a simple call, but an agent would still need to rely on the schema for complete invocation context.
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 baseline is 3. The description adds value by grouping parameters into meaningful filter categories, clarifying that 'linked' refers to having a project_id, and explaining the practical meaning of expiringWithinDays. This goes beyond the schema alone without duplicating it.
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 a clear verb and resource: 'Browse LTS records from DHSUD with filters.' It further explains what the records contain (normalized records with confidence levels) and lists the main filter dimensions. It does not explicitly contrast itself with siblings like lts_search or lts_by_region, so it stops short of full differentiation.
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 clearly identifies the general use case: browsing and filtering LTS records, and even gives a specific pointer for expiringWithinDays. However, it never mentions when to prefer a sibling tool such as lts_search or lts_stats, nor does it state when not to use lts_records. Usage context is implied rather than explicitly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_searchAInspect
Search across DHSUD LTS records and published projects by name, LTS number, developer, or city. Returns matches from both lts_records and published projects. Universal entry point for LTS data.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per category | |
| query | Yes | Search term: project name, LTS number, developer name, or city. Matched as a literal substring; use * as a wildcard. A term of only wildcards matches nothing | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the behavioral burden, and it does disclose the important combined-source behavior: matches come from both lts_records and published projects. It does not describe result ordering, grouping, or pagination semantics beyond what the schema already states.
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?
Three short sentences each add distinct value: action and search fields, return scope, and positioning as the entry point. There is no filler or repetition of schema details.
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 read-only search tool with all parameters documented in the schema, the description gives sufficient invocation context by defining the searched domains and result sources. The absence of an output schema is partially mitigated by the 'matches from both lts_records and published projects' statement, though a bit more return-format detail would make it 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 input schema already documents all three parameters at 100% coverage, including query substring/wildcard behavior and limit/offset defaults, so the baseline is 3. The description mostly restates the query parameter's accepted fields without adding new parameter-level detail.
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 opens with a specific action and resource: 'Search across DHSUD LTS records and published projects' and names the searchable fields (name, LTS number, developer, city). The 'Universal entry point' phrase differentiates it from specialized siblings like lts_by_city and lts_by_developer.
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?
'Universal entry point for LTS data' plus the broad search scope clearly establishes this as the general-purpose search tool. It does not explicitly name when to avoid it and delegate to a specific sibling, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_statsAInspect
Get system-wide LTS statistics. Returns two sections: (1) lts_records stats (total, by confidence, linked/unlinked, active/expired, unique developers/cities), and (2) project LTS stats (total records, verified, expired, expiring within 30 days, projects with LTS).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently details the two return sections and their contents, giving a clear picture of the output. It does not mention caching, permissions, or computation method, but for a read-only stats endpoint, this level is sufficient.
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-loads the main purpose, and uses a clear numbered list for the return sections. Every word contributes value; there is no fluff or repetition.
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 simplicity (no parameters, no output schema), the description fully accounts for what the caller needs to know: the scope and the exact contents of the response. The sibling tool names further reinforce the system-wide vs. segmented distinction. No additional context is necessary.
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 tool has zero parameters, so there is no parameter semantics to explain. The baseline score of 4 applies because there is nothing that requires elaboration, and the description does not need to compensate for schema gaps.
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 begins with a specific verb and resource: 'Get system-wide LTS statistics.' It clearly distinguishes this tool from siblings like lts_by_city or lts_by_developer by emphasizing the system-wide scope. It also enumerates the exact return sections, making the purpose unambiguous.
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 phrase 'system-wide' provides clear context for when to use this tool versus more narrowly scoped sibling tools. However, it does not explicitly name alternatives or state exclusions, so the guidance is implied rather than directly actionable. This is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lts_trendsAInspect
Show LTS issuance trends over time with annual or quarterly granularity. Returns period counts with law breakdown, peak period, and year-over-year growth percentage. Use for housing supply pipeline analysis and market timing. Capped at 25k rows; check truncated flag and narrow filters if true.
| Name | Required | Description | Default |
|---|---|---|---|
| law | No | Filter by housing law: BP220 (socialized/economic) or PD957 (open market) | |
| region | No | Filter to a specific DHSUD region | |
| to_year | No | End year (inclusive) | |
| from_year | No | Start year (inclusive) | |
| granularity | No | Time bucket granularity | annual |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses a 25k row cap, truncated flag behavior, and return content (period counts, law breakdown, peak period, YoY growth), providing essential behavioral context beyond the schema.
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 purpose and granularity, then return details, use case, and limit. Every sentence earns its place with no filler.
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?
Since there is no output schema, the description explains key return fields and truncation behavior, which is sufficient for an agent. It lacks precise field names/type structure but provides enough context for decision-making.
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 has 100% coverage with descriptions for all 5 parameters, so the baseline is 3. The description adds marginal reinforcement of granularity and law breakdown but does not introduce new parameter meaning.
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 uses a specific verb 'Show' and resource 'LTS issuance trends over time' with granularity, which clearly distinguishes it from sibling tools that focus on breakdowns by city, developer, law, or region.
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?
Provides explicit use case 'for housing supply pipeline analysis and market timing,' giving clear context for when to use the tool. However, it does not explicitly reference alternative tools or exclusions, so it falls short of a 5.
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.
1 tool update
- Changed
lts_by_region2 fields changed- changed
Input schema / properties / status / descriptionPrevious value: -"Filter by derived LTS status: active (expiry >= today) or expired"New value: +"Filter by derived LTS status: active (expiry >= today), expired (expiry < today), or unknown (no expiry date on record). Records with no expiry date are NOT counted as expired" - changed
Input schema / properties / status / enumPrevious value: -[ - "active", - "expired" -]New value: +[ + "active", + "expired", + "unknown" +]
3 tool updates
- Changed
lts_project1 field changed- changed
Input schema / properties / projectName / descriptionPrevious value: -"Project name or slug for fuzzy lookup. Use when you don't have the UUID"New value: +"Project name or slug for fuzzy lookup. Matched as a literal substring; use * as a wildcard. A term of only wildcards matches nothing. Use when you don't have the UUID"
- Changed
lts_records1 field changed- changed
Input schema / properties / search / descriptionPrevious value: -"Text search: project name, LTS number, or developer"New value: +"Text search: project name, LTS number, or developer. Matched as a literal substring; use * as a wildcard. A term of only wildcards matches nothing"
- Changed
lts_search1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search term: project name, LTS number, developer name, or city"New value: +"Search term: project name, LTS number, developer name, or city. Matched as a literal substring; use * as a wildcard. A term of only wildcards matches nothing"
12 tool updates
- First observed
lts_by_city - First observed
lts_by_developer - First observed
lts_by_law - First observed
lts_by_region - First observed
lts_check - First observed
lts_expiry_risk - First observed
lts_filters - First observed
lts_project - First observed
lts_records - First observed
lts_search - First observed
lts_stats - First observed
lts_trends
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT- AlicenseNot gradedqualityCmaintenanceEnables AI chat clients to perform market research and competitive intelligence by gathering company overviews, competitor lists, product portfolios, pricing snapshots, and recent news via live Tavily search.MIT
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.11961MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a distinct aspect of LTS data (by city, developer, law, region, etc.) with no overlapping purposes. The descriptions clearly delineate their unique use cases.
All tools follow the consistent pattern 'lts_<descriptive_noun_or_phrase>' using snake_case. The naming is uniform and predictable, aiding agent selection.
With 12 tools, the set is well-scoped for a data query and analysis server. Each tool serves a clear function without redundancy or overload.
The tool set covers all necessary query dimensions (city, developer, law, region, expiry, stats, trends) and includes a search, check, and project-level view. No obvious gaps for a read-only analytics server.