Skip to main content
Glama

Generate Vastu Report (PDF or HTML)

astroway_reports_vastu

The /vastu/plan reading as an A4 PDF (default) or live HTML (add ?format=html): the school and the north on the cover, the score with its band, the plan drawn with the mandala (and the 16 zones for school sixteen-zone), every finding heaviest first with its source, and the remedies with their effort and whether they can be undone. Takes the /vastu/plan input. Texts in Ukrainian or English; any other language gets the English document.

[Group: Reports] [Endpoint: POST /v1/reports/vastu] [Required: coords, northAngle, boundary] [Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "coords": "<coords>",
      "northAngle": "<northAngle>",
      "boundary": "<boundary>"
    },
    "name": "astroway_reports_vastu"
  }
}

Input Schema

NameRequiredDescriptionDefault
itemsNo
roomsNo
coordsYes
facingNo
fieldsNoCompact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
formatNo`pdf` (default) stores a PDF and answers with its `url`. `html` returns one self-contained `text/html` document, `markdown` returns `text/markdown` with the same sections and tables; neither is stored. Same price in every format.
schoolNo
boundaryYes
entranceNo
languageNo
precisionNoCompact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
northAngleYes
whitelabelNo
declinationNo
scoreVersionNo
entranceMethodNo
northReferenceNo

Output Schema

NameRequiredDescriptionDefault
urlNo
expires_atNo
page_countNo
byte_lengthNo
duration_msNo
storage_keyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "`pdf` (default) stores a PDF and answers with its `url`. `html` returns one self-contained `text/html` document, `markdown` returns `text/markdown` with the same sections and tables; neither is stored. Same price in every format.",
      +  "enum": [
      +    "pdf",
      +    "html",
      +    "markdown"
      +  ],
      +  "type": "string"
      +}
  2. Changed13 schema fields changed
    • changedInput schema / properties / whitelabel / anyOf
      Previous value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "backgroundColor": {
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "companyBio": {
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "companyEmail": {
      -        "format": "email",
      -        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      -        "type": "string"
      -      },
      -      "companyMobile": {
      -        "maxLength": 40,
      -        "type": "string"
      -      },
      -      "companyName": {
      -        "maxLength": 80,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "companyUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "fontPairing": {
      -        "enum": [
      -          "serif-sans",
      -          "sans-serif",
      -          "serif-only",
      -          "sans-only",
      -          "system"
      -        ],
      -        "type": "string"
      -      },
      -      "footerText": {
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "frontImage": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "headingColor": {
      -        "description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor).",
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "logoUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "reportName": {
      -        "maxLength": 80,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "textPrimaryColor": {
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "textSecondaryColor": {
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "themeColor": {
      -        "description": "Accent colour, used for section heading text and inline emphasis.",
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "backgroundColor": {
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "companyBio": {
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "companyEmail": {
      +        "format": "email",
      +        "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      +        "type": "string"
      +      },
      +      "companyMobile": {
      +        "maxLength": 40,
      +        "type": "string"
      +      },
      +      "companyName": {
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "companyUrl": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "fontPairing": {
      +        "enum": [
      +          "serif-sans",
      +          "sans-serif",
      +          "serif-only",
      +          "sans-only",
      +          "system"
      +        ],
      +        "type": "string"
      +      },
      +      "footerText": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "frontImage": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "headingColor": {
      +        "description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor).",
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "logoUrl": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "reportName": {
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "textPrimaryColor": {
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "textSecondaryColor": {
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "themeColor": {
      +        "description": "Accent colour, used for section heading text and inline emphasis.",
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / properties / byte_length / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / byte_length / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / duration_ms / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / duration_ms / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / expires_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / expires_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / page_count / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / page_count / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / storage_key / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / storage_key / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Added

TDQS

A3.6/5.0
Behavior4/5

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

The description adds substantial behavior beyond the annotations: a 5,000-credit Tier 7 price with an explicit instruction to confirm with the user, plus the output-shape contract (sections, ordering of findings, remedies with effort/undoability) and the language fallback rule that unsupported languages silently get English. Annotations cover the mutation profile (readOnlyHint=false, non-idempotent, non-destructive), so this is a real contribution; the only gap is that it doesn't state upfront that the PDF is persisted and returned as a URL.

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?

The content is front-loaded and every clause carries payload (sections, cost, language). It is one long colon-chained sentence that gets dense with parentheticals like '(and the 16 zones for school sixteen-zone)', and the bracketed Group/Endpoint/Required/Cost block is appended rather than integrated, but nothing is genuinely redundant.

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

Completeness3/5

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

An output schema exists, so the description needn't restate return values and doesn't have to. But for a 17-parameter nested-geometry tool at 18% schema description coverage, the description leaves the agent without guidance on boundary polygon semantics, northAngle vs northReference vs declination, or the purpose of rooms/items/whitelabel — the 'Takes the /vastu/plan input' pointer helps, but only if the agent can read that sibling's schema. Cost, language and format are the only parameters made fully self-sufficient.

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?

Schema description coverage is 18% across 17 parameters, so the description has to compensate. It does explain format behavior (pdf default vs live html), language (uk/en, others fall back to English), the required trio (coords, northAngle, boundary), and points at the /vastu/plan input contract, but the single-parameter hint 'add ?format=html' misframes a body enum that also accepts markdown, and boundary geometry, northAngle, northReference, entrance/entranceMethod, rooms/items, scoreVersion, whitelabel, fields and precision go unmentioned.

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

Purpose4/5

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

It states a specific resource and artifact: the /vastu/plan reading rendered as an A4 PDF or live HTML, and enumerates exactly what the document contains (cover, score band, mandala plan, findings heaviest-first, remedies with effort/undoability). The opening 'Takes the /vastu/plan input' implicitly separates it from the analysis sibling astroway_vastu_shastra_vastu_plan and from render-only siblings, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: 'Takes the /vastu/plan input' tells the agent it must first produce a plan, and the premium-cost warning adds a 'confirm with user' gate. There is no explicit when-not guidance, no pointer to a sibling (e.g. a non-report vastu tool) for the case where the agent just wants the raw reading, and no statement about when HTML is preferable to PDF beyond availability.

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