{
  "schema": "grandet.price-finder-discovery/v1",
  "origin": "https://grandet.ai",
  "mcp": {
    "url": "https://grandet.ai/mcp",
    "transport": "streamable-http",
    "authentication": "anonymous",
    "tools": [
      "grandet_find_cheapest_api",
      "grandet_resolve_model",
      "grandet_list_apps",
      "grandet_quote_evidence",
      "grandet_glossary",
      "grandet_find_free_credits"
    ],
    "version": "0.3.0",
    "selectorValidation": "Find and quote-evidence tools expose model/name in inputSchema.properties; exactly one selector is required at invocation"
  },
  "http": {
    "lookup": "https://grandet.ai/api/v1/board",
    "models": "https://grandet.ai/api/v1/models",
    "evidence": "https://grandet.ai/api/v1/prices",
    "page": "https://grandet.ai/api/grandet/page",
    "version": "https://grandet.ai/api/v1/catalog-version",
    "glossary": "https://grandet.ai/api/v1/glossary",
    "freeCredits": "https://grandet.ai/api/v1/free-credits"
  },
  "lookup": {
    "schema": "grandet.board/v1",
    "selector": {
      "model": "Exact catalogue ID or model name; otherwise a unique natural-name match. Ambiguity returns NEEDS_CLARIFICATION and at most two candidates.",
      "name": "20-character hexadecimal raw-name ID; use exactly one selector"
    },
    "parameters": [
      "model",
      "name",
      "mix",
      "host",
      "targetApp",
      "targetProfile",
      "client",
      "skillVersion",
      "endpointType",
      "currency",
      "channel",
      "plans",
      "limit",
      "releaseSet",
      "asOf",
      "lang",
      "os",
      "schema",
      "view",
      "skillBuild"
    ],
    "presets": {
      "chat": {
        "in": 75,
        "cacheRead": 0,
        "out": 25,
        "cacheWrite": 0
      },
      "coding": {
        "in": 20,
        "cacheRead": 70,
        "out": 10,
        "cacheWrite": 0
      },
      "long_output": {
        "in": 35,
        "cacheRead": 0,
        "out": 65,
        "cacheWrite": 0
      }
    },
    "units": [
      "USD_CREDIT",
      "CNY_CREDIT",
      "USD",
      "CNY"
    ],
    "endpointTypes": [
      "openai",
      "openai-response",
      "anthropic",
      "gemini"
    ],
    "limit": {
      "minimum": 1,
      "maximum": 20,
      "basis": "per unit board"
    },
    "defaultEvaluation": "request time",
    "versionConflictHttpStatus": 409,
    "transportConsistency": "Identical model/name, mix, target, limit, releaseSet and asOf use the same HTTP/MCP recommendation core",
    "views": {
      "full": "Default response including legacy fields and additive listings",
      "compact": "Common integration cards in integrationCards; each row integration.card indexes the array. Replace {{model}} and {{tokenGroup}} in stepsTemplate with that row’s literal values. Per-row base URL and evidence remain on the row. fullResultUrl selects the full response. MCP has one short text block and structuredContent."
    }
  },
  "applicationSelection": {
    "catalogueTool": "grandet_list_apps",
    "host": "Optional source attribution for normal-request statistics only; never selects an inference route or workload",
    "targetApp": "Explicit application intended to use the supplier API",
    "priority": [
      "targetApp",
      "client",
      "generic"
    ],
    "defaultWithoutTarget": {
      "appId": "generic",
      "workload": "chat",
      "endpointTypes": null
    },
    "unrecordedConnection": "Cursor and valid unrecorded target IDs without a recorded inference profile return PRICE_ONLY_UNVERIFIED_APP_ROUTE and compare prices without a compatibility claim",
    "explicitProtocolUnverified": "An unrecorded connection with an explicit endpointType filters that protocol and returns EXPLICIT_PROTOCOL_UNVERIFIED_APP_ROUTE",
    "connectionStatus": "NEEDS_CONNECTION_DETAILS is retained when a known application has profiles but none for the selected platform",
    "conflicts": "Explicit targetApp, targetProfile, endpointType and os conflicts retain their declared errors; do not remove constraints to bypass them",
    "legacyClient": "Existing client remains a target alias; existing client plus explicit endpointType retains its protocol override. New requests use targetApp",
    "multiProtocol": "Without an explicit profile or protocol, compare across the target application profiles supported on the selected platform"
  },
  "resultReading": {
    "recommendation": "When listings is present, use listings.priceOrder for price ordering, lowest for up to two distinct sources, gated for lower conditional prices, reference for lower offers requiring review, and folded for client-only counts. Existing recommended/alternative/cheapest/rows keep legacy semantics.",
    "units": "Compare offers within one currency or credit unit",
    "freshness": "Read each offer observedAt and freshness; stale reference offers retain their original observation",
    "evidence": "Follow evidenceUrl and its pagination for the original conditions",
    "configuration": "Read integration.baseUrl and baseUrlMode (BASE/SUGGESTION/INFO_ONLY/NONE), their source observation and evidence. New API tokenGroup is the complete original plan. Use configurationFormat, configurationPath, steps and compatibility for the selected application. Enter keys locally.",
    "unverified": "PRICE_ONLY_UNVERIFIED_APP_ROUTE and EXPLICIT_PROTOCOL_UNVERIFIED_APP_ROUTE carry APP_CONNECTION_NOT_VERIFIED; they are price recommendations, not verified application connections",
    "listingCompatibility": "HIDE and client folding apply to the additive listings projection. Legacy fields retain historical filters; they may include rows omitted by listings. Each matched row carries the original classification. Classification is not a quality or eligibility verification."
  },
  "usageStatistics": {
    "basis": "Business requests by UTC day",
    "dimensions": [
      "operation",
      "transport",
      "host",
      "targetApp",
      "skillVersion",
      "skillBuild"
    ],
    "access": "OWNER authenticated reporting",
    "excludedFields": [
      "model",
      "prompt",
      "apiKey",
      "ip",
      "deviceId",
      "accountId"
    ],
    "skillBuild": "Optional bounded attribution. Approved full build IDs and short date aliases share a bucket; unknown values share unknown; omitted values remain legacy. It does not change prices, ranking or Skill version. Old events and snapshots retain original contents."
  },
  "publicSkillRelease": true,
  "skillDistribution": {
    "status": "PUBLIC_PREVIEW",
    "version": "0.3.0",
    "notice": "Grandet Skill 0.3.0 is available as a public preview. Persistent installation and automatic discovery depend on the host.",
    "page": "https://grandet.ai/download/",
    "installationGuide": "https://grandet.ai/download.md",
    "sourceDirectory": "https://github.com/hanzohanzhe/Grandet/tree/main/skills/grandet-api-price-finder",
    "installationZip": "https://github.com/hanzohanzhe/Grandet/releases/download/skill-v0.3.0-build.20261016c/grandet-api-price-finder-0.3.0.zip",
    "nativeSkill": "https://github.com/hanzohanzhe/Grandet/releases/download/skill-v0.3.0-build.20261016c/grandet-api-price-finder-0.3.0.skill",
    "agentInstructions": "https://grandet.ai/download.md",
    "defaultNewInstallation": "explicit_registered_release_asset",
    "releaseTag": "skill-v0.3.0-build.20261016c",
    "reuseExistingContents": true,
    "releaseRegistry": "https://github.com/hanzohanzhe/Grandet/blob/main/downloads/releases.json",
    "installationReceipts": {
      "endpoint": "https://grandet.ai/api/community/v1/installation-events",
      "documentation": "https://grandet.ai/download.md#installation-receipts",
      "phase": "installation_or_explicit_verification_only",
      "optOut": [
        "--no-telemetry",
        "GRANDET_INSTALL_TELEMETRY=0"
      ],
      "identity": "client_reported_random_ids_not_people",
      "supportedSkillVersions": [
        "0.3.0"
      ],
      "historicalUnobservedInstallations": "excluded_before_measurement_start",
      "packageSupport": "INCLUDED",
      "packageBuild": "grandet-skill-0.3.0-build.20261016c"
    },
    "build": "grandet-skill-0.3.0-build.20261016c",
    "packages": {
      "zip": {
        "url": "https://github.com/hanzohanzhe/Grandet/releases/download/skill-v0.3.0-build.20261016c/grandet-api-price-finder-0.3.0.zip",
        "bytes": 317670,
        "sha256": "9a5794bcb0ff9cbaaef1857062b82191af4aa56fd06e3addb97f38489776aa3a",
        "assetId": 646429394
      },
      "skill": {
        "url": "https://github.com/hanzohanzhe/Grandet/releases/download/skill-v0.3.0-build.20261016c/grandet-api-price-finder-0.3.0.skill",
        "bytes": 105669,
        "sha256": "002cfdac36091c5be467135108d2fae53c50d274b898e9c06a7803a7969e5798",
        "assetId": 646429423
      }
    },
    "downloadMetrics": {
      "basis": "PUBLISHED_GITHUB_RELEASE_ASSET_HIGH_WATERS_PLUS_ENABLED_CLONE_DAY_HIGH_WATERS",
      "monotonic": true,
      "installationReceiptsCountedSeparately": true,
      "repositoryClones": "included_only_when_enabled_in_public_metrics",
      "description": {
        "zh-CN": "下载次数是 GitHub 上所有已发布的 Grandet Skill 安装包的累计下载次数，包括 Agent 下载、手动下载、更新和重复下载，只增不减。安装完成回执单独记录。GitHub 数据有同步延迟，某次没取到时沿用上次的数。",
        "en": "Downloads are the cumulative downloads of every published Grandet Skill package on GitHub, including agent and manual downloads, updates and repeats; the total only goes up. Installation receipts are counted separately. GitHub data is delayed; when a refresh fails, the last figure stays."
      }
    }
  },
  "serviceVersion": "0.3.0",
  "glossary": {
    "current": "https://grandet.ai/public-data/relay-glossary.json",
    "history": "https://grandet.ai/public-data/relay-glossary-v1.json",
    "version": "1.0.0-draft",
    "sha256": "ab440df870a96d747cf12908159cd6d8711e92d8b5c1d8a26921d80ebdea5e2f",
    "sha256Scope": "original glossary source bytes; public projection has its own transport checksum",
    "classifierVersion": "grandet.relay-glossary-classifier/0.6",
    "queryParameters": [
      "q",
      "category",
      "lang",
      "page",
      "limit"
    ],
    "maxPageSize": 20
  },
  "freeCredits": {
    "parameters": [
      "q",
      "kind",
      "userCanMeet",
      "lang",
      "host",
      "targetApp",
      "skillVersion",
      "skillBuild",
      "page",
      "limit",
      "releaseSet",
      "asOf"
    ],
    "kind": [
      "official",
      "relay",
      "all"
    ],
    "userCanMeet": [
      "any",
      "no_card",
      "student"
    ],
    "maxPageSize": 20,
    "fields": [
      "benefitText",
      "requirements",
      "conditions",
      "deadline",
      "claimUrl",
      "observedAt",
      "evidence"
    ],
    "requirements": [
      "card",
      "identity",
      "payment",
      "invite",
      "application",
      "renewal"
    ],
    "qualification": "Current captured declarations with original conditions and dates. Claimability and personal eligibility remain unverified. Unknown card conditions do not satisfy no_card. Student category does not establish individual eligibility. Nonzero stated-free groups retain their actual price components."
  }
}
