Skip to main content
Glama

Service catalog and pricing

get_services
Read-onlyIdempotent

Returns turva.dev's service catalog: the external domain check, the Shopify agent storefront check, agent-readiness audit, advisory, implementation, agent operations, and MCP server design, plus the engagement model and pricing. Fixed list prices apply to the external domain check, Shopify agent storefront check, audit, advisory and implementation. Agent operations and MCP server design are on request. The catalog also lists two implementation add-ons that carry a fixed price and are sold only with the diagnosis they follow, bought with it, with its report, or after the report and before implementation starts. The Shopify agent storefront check and the audit each link a published sample report in sample_url, a fictional worked example of the deliverable. The external domain check links a sample report made from turva.dev's own domain, with real readings. Use this when a user asks what turva.dev offers, what it costs, how an engagement works, or what a delivered report looks like. For how to reach turva.dev use get_contact instead, and for the rules an engagement follows use get_principles. Read-only: returns static JSON that is compiled into the Worker, so it changes nothing and updates only on deploy.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
currencyYesISO 4217 code of every price, EUR.
servicesYesThe services with their prices.
engagementYesHow an engagement is run.
pricing_noteYesThe VAT treatment by customer type, the services quoted per engagement and the rule for the add-ons.
vat_includedYesWhether the prices include VAT. False means every price excludes VAT.
pricing_modelYesThe pricing model. fixed_list_prices means fixed list prices, apart from the services priced on request.
bundled_implementationYesImplementation add-ons that are sold only with another service.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / services / items / properties / duration_from
      Added value: +{
      +  "description": "The event the duration counts from, where the service states one.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / engagement / properties / notes / items / description
      Added value: +"One term of an engagement as a sentence."
  3. Changed22 schema fields changed
    • addedOutput schema / properties / bundled_implementation / description
      Added value: +"Implementation add-ons that are sold only with another service."
    • addedOutput schema / properties / bundled_implementation / items / properties / id / description
      Added value: +"Stable identifier of the add-on."
    • addedOutput schema / properties / bundled_implementation / items / properties / name / description
      Added value: +"The name of the add-on."
    • addedOutput schema / properties / bundled_implementation / items / properties / price / description
      Added value: +"Price in EUR, VAT not included."
    • addedOutput schema / properties / bundled_implementation / items / properties / sold_separately / description
      Added value: +"Whether the add-on can be bought without its service. False means it cannot."
    • addedOutput schema / properties / bundled_implementation / items / properties / summary / description
      Added value: +"What the add-on covers and when it is bought."
    • addedOutput schema / properties / bundled_implementation / items / properties / unit / description
      Added value: +"What the price covers, such as fixed."
    • addedOutput schema / properties / currency / description
      Added value: +"ISO 4217 code of every price, EUR."
    • addedOutput schema / properties / engagement / description
      Added value: +"How an engagement is run."
    • addedOutput schema / properties / engagement / properties / communication / description
      Added value: +"How an engagement is communicated, async_only for written exchange with no calls."
    • addedOutput schema / properties / engagement / properties / notes / description
      Added value: +"Terms of an engagement, one per entry, covering access, scope, dates and completion."
    • addedOutput schema / properties / pricing_model / description
      Added value: +"The pricing model. fixed_list_prices means fixed list prices, apart from the services priced on request."
    • addedOutput schema / properties / pricing_note / description
      Added value: +"The VAT treatment by customer type, the services quoted per engagement and the rule for the add-ons."
    • addedOutput schema / properties / services / description
      Added value: +"The services with their prices."
    • addedOutput schema / properties / services / items / properties / deliverable / description
      Added value: +"What the customer receives and when."
    • addedOutput schema / properties / services / items / properties / duration / description
      Added value: +"How long delivery takes, where the service states one."
    • addedOutput schema / properties / services / items / properties / id / description
      Added value: +"Stable identifier of the service."
    • addedOutput schema / properties / services / items / properties / minimum_commitment / description
      Added value: +"The shortest term the service is sold for, where one applies."
    • addedOutput schema / properties / services / items / properties / name / description
      Added value: +"The name of the service."
    • addedOutput schema / properties / services / items / properties / summary / description
      Added value: +"What the service covers and its scope."
    • addedOutput schema / properties / services / items / properties / unit / description
      Added value: +"What the price covers, such as fixed, month or day. Absent when the price is on request."
    • addedOutput schema / properties / vat_included / description
      Added value: +"Whether the prices include VAT. False means every price excludes VAT."
  4. Changed3 schema fields changed
    • addedInput schema / $schema
      Added value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "bundled_implementation": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "price": {
      +            "type": "number"
      +          },
      +          "requires": {
      +            "description": "The id of the service this add-on is sold with.",
      +            "type": "string"
      +          },
      +          "sold_separately": {
      +            "type": "boolean"
      +          },
      +          "summary": {
      +            "type": "string"
      +          },
      +          "unit": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "price",
      +          "unit",
      +          "requires",
      +          "sold_separately",
      +          "summary"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "currency": {
      +      "type": "string"
      +    },
      +    "engagement": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "communication": {
      +          "type": "string"
      +        },
      +        "notes": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "communication",
      +        "notes"
      +      ],
      +      "type": "object"
      +    },
      +    "pricing_model": {
      +      "type": "string"
      +    },
      +    "pricing_note": {
      +      "type": "string"
      +    },
      +    "services": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "deliverable": {
      +            "type": "string"
      +          },
      +          "duration": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "minimum_commitment": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "price": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "const": "on request",
      +                "type": "string"
      +              }
      +            ],
      +            "description": "EUR, VAT not included, or on request."
      +          },
      +          "sample_url": {
      +            "description": "A published sample of the deliverable, where one exists.",
      +            "type": "string"
      +          },
      +          "summary": {
      +            "type": "string"
      +          },
      +          "unit": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The turva.dev page that describes the service.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "url",
      +          "price",
      +          "summary",
      +          "deliverable"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "vat_included": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "pricing_model",
      +    "pricing_note",
      +    "currency",
      +    "vat_included",
      +    "engagement",
      +    "services",
      +    "bundled_implementation"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  6. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, and the description reinforces this with concrete mechanism: static JSON compiled into the Worker, mutates nothing, refreshes only on deploy. It also flags which offerings are fixed-price versus on-request, which is behavioral context an agent needs to avoid quoting a price for agent operations or MCP design. Minor gap: it does not say how large the payload is or whether the catalog can be empty.

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 correctly — what it returns first, then usage triggers, then sibling routing, then read-only behavior. Most sentences earn their place, but the add-on sentence ('bought with it, with its report, or after the report and before implementation starts') is tangled and reads as pricing fine print rather than selection guidance.

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?

An output schema exists, yet the description still adds the one thing the schema cannot convey: that sample_url points at fictional worked examples for two services but a real-reading example for the domain check. Combined with pricing-model disclosure and deploy-time update semantics, an agent has everything needed to answer a prospect's question accurately.

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

Parameters4/5

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

Zero parameters, so the schema imposes no semantic burden and the baseline is 4. The description does not need to explain parameters, and the field-level detail it volunteers (sample_url) is return-value context rather than parameter guidance.

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?

Opens with a specific verb+resource ('Returns turva.dev's service catalog') and enumerates exactly what the catalog contains — services, engagement model, pricing, add-ons, sample reports. An agent can distinguish this from get_agent_readiness or get_security_evidence without opening the 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 names the triggering intents ('what turva.dev offers, what it costs, how an engagement works, or what a delivered report looks like') and routes two alternatives away: get_contact for contact info, get_principles for engagement rules. This is textbook when/when-not/alternatives coverage.

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