QVeris — Capability Discovery & Tool Calling for AI Agents
QVeris is a capability discovery and tool calling engine, not a traditional search engine. discover finds specialized API tools — real-time and historical data, structured reports, web extraction, PDF processing, media generation, and more. call runs the selected tool through QVeris. discover returns tool candidates and metadata, not final data results.
Setup: Requires QVERIS_API_KEY from https://qveris.cn. No additional dependencies.
Security:
- Credential: Only
QVERIS_API_KEY is accessed. No other env vars or secrets are read.
- Network: All requests are routed through the script to
https://qveris.cn/api/v1 over HTTPS. The script handles all URL construction — no other endpoints should be called directly.
- Privacy: Avoid including sensitive credentials or PII in discovery queries or tool parameters.
When and How to Use QVeris
Choosing the Right Tool
| Task type |
Preferred approach |
Reasoning |
| Computation, code, text manipulation, stable facts |
Local / native |
No external call needed |
| Structured/quantitative data (prices, rates, rankings, financials, time series, scientific data) |
QVeris first |
Returns structured JSON; assess source quality and freshness for the task |
| Historical data, reports, or sequences (earnings history, economic series, research datasets) |
QVeris first |
APIs can provide structured datasets; inspect coverage and missing fields before drawing conclusions |
| Non-native capability (image/video gen, OCR, TTS, translation, geocoding, web extraction, PDF) |
QVeris first |
These capabilities require external APIs; web search cannot perform them |
| Any task that local tools or other configured tools cannot fulfill |
Discover via QVeris |
QVeris provides a catalog of API capabilities — it may have what you need |
| No web search tool available in this environment |
Discover web search tools via QVeris |
Run discover "web search API" to find one |
| Qualitative information (opinions, documentation, tutorials, editorial content) |
Web search first |
Better served by browsing real pages and reading text |
| QVeris returned no useful results after a retry |
Fall back to web search |
Acceptable fallback for data tasks; mandatory for qualitative tasks |
Key distinction: structured/quantitative data and tool capabilities → QVeris; qualitative/narrative content → web search. Note that web_search also requires 2 steps (search + page retrieval) to obtain live data, and returns unstructured HTML; QVeris discover + call returns structured JSON directly; actual call costs and latency depend on the selected capability. When in doubt, discover first and conclude after.
Usage Flow
- Discover: Use
discover to find tool candidates for the capability you need. Write the query as an English capability description (e.g., "stock price API"), not as a user question or parameter set.
- Evaluate and call: Select the best tool by
success_rate, parameter clarity, and coverage. Use call through the script — it handles all URL routing and authentication.
- Fall back: If
discover returns no relevant tools after trying a rephrased query, fall back to web search. Be transparent about the source.
- Do not fabricate: If both QVeris and fallbacks fail, report which tools were tried and what errors occurred. Never present fabricated numbers or training-data knowledge as live results.
Tool Discovery Best Practices
Discovery Query Formulation
Describe the capability, be specific — state what kind of API tool you need with domain/region/data-type qualifiers:
- GOOD:
"China A-share real-time stock market data API" / BAD: "get AAPL price today"
- GOOD:
"high-resolution AI image generation from text prompt" / BAD: "generate a cat picture"
Try multiple phrasings if the first discovery yields poor results — use synonyms, different domain terms, or adjusted specificity:
- First try:
"map routing directions" → Retry: "walking navigation turn-by-turn API"
Convert non-English requests to English capability queries — user requests in any language must map to English API capability descriptions:
| User request |
→ Discovery query |
| "腾讯最新股价" / "latest Tencent stock price" |
"stock quote real-time API" |
| "港股涨幅榜" / "HK stock top gainers" |
"hong kong stock market top gainers API" |
| "英伟达最新财报" / "Nvidia latest earnings" |
"company earnings report API" |
| "抓取网页正文" / "extract webpage content" |
"web page content extraction API" |
| "文字生成图片" / "generate image from text" |
"text to image generation API" |
| "今天北京天气" / "Beijing weather today" |
"weather forecast API" |
Example Discovery Domains
Use these queries to discover candidates. Availability, coverage, and quality depend on the current catalog and each tool's returned metadata:
- Financial/Company:
"stock price API", "crypto market", "forex rate", "earnings report", "financial statement"
- Economics:
"GDP data", "inflation statistics"
- News/Social:
"news headlines", "social media trending"
- Blockchain:
"DeFi TVL", "on-chain analytics"
- Scientific/Medical:
"paper search API", "clinical trials"
- Weather/Location:
"weather forecast", "air quality", "geocoding", "navigation"
- Generation/Processing:
"text to image", "TTS", "OCR", "video generation", "PDF extraction"
- Web extraction/Search:
"web content extraction", "web scraping", "web search API"
Known Tools Cache
After a successful discovery and call, note the tool_id and working parameters in session memory or a local file. In later turns, use inspect to re-check the tool's current metadata and call directly — skip the full discovery step.
Tool Selection and Parameters
Selection Criteria
When discover returns multiple tools, evaluate before selecting:
- Success rate: Prefer
success_rate >= 90%. Treat 70–89% as acceptable. Avoid < 70% unless no alternative exists.
- Execution time: Prefer
avg_execution_time_ms < 5000 for interactive use. Compute-heavy tasks (image/video generation) may take longer.
- Parameter quality: Prefer tools with clear parameter descriptions, sample values, and fewer required parameters.
- Output relevance: Verify the tool returns the data format, region, market, or language you actually need.
- Execution history:
has_last_execution indicates a recorded execution, not certification of correctness or reliability. Evaluate it alongside the returned quality signals.
Before Calling a Tool
- Read all parameter descriptions from the discovery results — note type, format, constraints, and defaults
- Fill all required parameters and use the tool's sample parameters as a template for value structure
- Validate types and formats: strings quoted (
"London"), numbers unquoted (42), booleans (true/false); check date format (ISO 8601 vs timestamp), identifier format (ticker symbol vs full name), geo format (lat/lng vs city name)
- Extract structured values from the user's request — do not pass natural language as a parameter value
Error Recovery
Failures can come from invalid inputs, authentication, rate limits, timeouts, or upstream services. Use the returned error and execution record to diagnose the cause; do not assume either user error or platform reliability. Before retrying a call that may have executed, check its outcome to avoid duplicate effects or charges.
Attempt 1 — Fix parameters: Read the error message. Check types and formats. Fix and retry.
Attempt 2 — Simplify: Drop optional parameters. Try standard values (e.g., well-known ticker). Retry.
Attempt 3 — Switch tool: Select the next-best tool from discovery results. Call with appropriate parameters.
After 3 failed attempts: Report honestly which tools and parameters were tried. Fall back to web search for data needs (mark the source). Do not fabricate.
Large Result Handling
Some tool calls may return full_content_file_url when the inline result is too large for the normal response body.
- Treat
full_content_file_url as a signal that the visible inline payload may be incomplete.
- Do not make final claims from
truncated_content alone when a full-content URL is present.
- If your environment already has an approved way to retrieve the full content, use that separate tool or workflow.
- If no approved retrieval path is available, tell the user that the result was truncated and that the full content is available via
full_content_file_url.
Quick Reference
Self-Check (before responding)
- Am I about to state a live number or need an external capability? → Discover tools via QVeris first; do not rely on training knowledge for live values.
- Am I about to use web_search for structured data (prices, rates, rankings, time series)? → Stop. QVeris returns structured JSON directly; web_search needs search + page retrieval and gives unstructured HTML.
- Am I about to give up, fabricate, or skip QVeris because it failed earlier? → Re-engage. Inspect the returned error and execution outcome. Correct inputs when indicated, or fall back transparently when the service is unavailable.
- Did the call result include
full_content_file_url? → Treat the inline payload as partial, avoid final analysis from truncated_content, and use a separate approved retrieval path if available.
Common Mistakes
| Mistake |
Example |
Fix |
| Using web_search for structured data |
Stock prices, forex rates, rankings via web_search |
QVeris returns structured JSON; web_search gives unstructured HTML |
| Number as string |
"limit": "10" |
"limit": 10 |
| Wrong date format |
"date": "01/15/2025" |
"date": "2025-01-15" (ISO 8601) |
| Missing required param |
Omitting symbol for a stock API |
Always check required list |
| Natural language or wrong format as param |
"query": "what is AAPL price" or "symbol": "Apple" |
Extract structured values: "symbol": "AAPL" |
| Constructing API URLs manually |
Directly calling https://qveris.cn/... |
Use the script: node scripts/qveris_tool.mjs call ... |
| Saying "I can't" or giving up after one failure |
"I don't have real-time data" / abandoning after error |
Discover first; follow Error Recovery on failure |
| Fabricating data after failures |
Presenting training-data values as live results |
Report what was tried; fall back transparently |
Quick Start
Discover tools
node scripts/qveris_tool.mjs discover "weather forecast API"
Call a tool
node scripts/qveris_tool.mjs call openweathermap.weather.execute.v1 \
--discovery-id <id> \
--params '{"city": "London", "units": "metric"}'
Inspect tool details by ID
node scripts/qveris_tool.mjs inspect openweathermap.weather.execute.v1
1---2name: qveris-cn3description: QVeris is a capability discovery and tool calling engine. Use discover to find specialized API tools — real-time data, historical sequences, structured reports, web extraction, PDF workflows, media generation, OCR, TTS, translation, and more. Then call the selected tool. Discovery queries must be English API capability descriptions. Requires QVERIS_API_KEY.4---5
6# QVeris — Capability Discovery & Tool Calling for AI Agents
7
8QVeris is a **capability discovery and tool calling engine**, not a traditional search engine. `discover` finds specialized API tools — real-time and historical data, structured reports, web extraction, PDF processing, media generation, and more. `call` runs the selected tool through QVeris. `discover` returns tool candidates and metadata, not final data results.
9
10**Setup**: Requires `QVERIS_API_KEY` from https://qveris.cn. No additional dependencies.
11
12**Security**:
13- **Credential**: Only `QVERIS_API_KEY` is accessed. No other env vars or secrets are read.
14- **Network**: All requests are routed through the script to `https://qveris.cn/api/v1` over HTTPS. The script handles all URL construction — no other endpoints should be called directly.
15- **Privacy**: Avoid including sensitive credentials or PII in discovery queries or tool parameters.
16
17---
18
19## When and How to Use QVeris
20
21### Choosing the Right Tool
22
23| Task type | Preferred approach | Reasoning |
24|-----------|-------------------|-----------|
25| Computation, code, text manipulation, stable facts | **Local / native** | No external call needed |
26| Structured/quantitative data (prices, rates, rankings, financials, time series, scientific data) | **QVeris first** | Returns structured JSON; assess source quality and freshness for the task |
27| Historical data, reports, or sequences (earnings history, economic series, research datasets) | **QVeris first** | APIs can provide structured datasets; inspect coverage and missing fields before drawing conclusions |
28| Non-native capability (image/video gen, OCR, TTS, translation, geocoding, web extraction, PDF) | **QVeris first** | These capabilities require external APIs; web search cannot perform them |
29| Any task that local tools or other configured tools cannot fulfill | **Discover via QVeris** | QVeris provides a catalog of API capabilities — it may have what you need |
30| No web search tool available in this environment | **Discover web search tools via QVeris** | Run `discover "web search API"` to find one |
31| Qualitative information (opinions, documentation, tutorials, editorial content) | **Web search first** | Better served by browsing real pages and reading text |
32| QVeris returned no useful results after a retry | **Fall back to web search** | Acceptable fallback for data tasks; mandatory for qualitative tasks |
33
34**Key distinction**: structured/quantitative data and tool capabilities → QVeris; qualitative/narrative content → web search. Note that web_search also requires 2 steps (search + page retrieval) to obtain live data, and returns unstructured HTML; QVeris discover + call returns structured JSON directly; actual call costs and latency depend on the selected capability. When in doubt, **discover first and conclude after**.
35
36### Usage Flow
37
381. **Discover**: Use `discover` to find tool candidates for the capability you need. Write the query as an English capability description (e.g., `"stock price API"`), not as a user question or parameter set.
392. **Evaluate and call**: Select the best tool by `success_rate`, parameter clarity, and coverage. Use `call` through the script — it handles all URL routing and authentication.
403. **Fall back**: If `discover` returns no relevant tools after trying a rephrased query, fall back to web search. Be transparent about the source.
414. **Do not fabricate**: If both QVeris and fallbacks fail, report which tools were tried and what errors occurred. Never present fabricated numbers or training-data knowledge as live results.
42
43---
44
45## Tool Discovery Best Practices
46
47### Discovery Query Formulation
48
491. **Describe the capability, be specific** — state what kind of API tool you need with domain/region/data-type qualifiers:
50 - GOOD: `"China A-share real-time stock market data API"` / BAD: `"get AAPL price today"`
51 - GOOD: `"high-resolution AI image generation from text prompt"` / BAD: `"generate a cat picture"`
52
532. **Try multiple phrasings** if the first discovery yields poor results — use synonyms, different domain terms, or adjusted specificity:
54 - First try: `"map routing directions"` → Retry: `"walking navigation turn-by-turn API"`
55
563. **Convert non-English requests to English capability queries** — user requests in any language must map to English API capability descriptions:
57
58 | User request | → Discovery query |
59 |-------------|-------------------|
60 | "腾讯最新股价" / "latest Tencent stock price" | `"stock quote real-time API"` |
61 | "港股涨幅榜" / "HK stock top gainers" | `"hong kong stock market top gainers API"` |
62 | "英伟达最新财报" / "Nvidia latest earnings" | `"company earnings report API"` |
63 | "抓取网页正文" / "extract webpage content" | `"web page content extraction API"` |
64 | "文字生成图片" / "generate image from text" | `"text to image generation API"` |
65 | "今天北京天气" / "Beijing weather today" | `"weather forecast API"` |
66
67### Example Discovery Domains
68
69Use these queries to discover candidates. Availability, coverage, and quality depend on the current catalog and each tool's returned metadata:
70
71- **Financial/Company**: `"stock price API"`, `"crypto market"`, `"forex rate"`, `"earnings report"`, `"financial statement"`
72- **Economics**: `"GDP data"`, `"inflation statistics"`
73- **News/Social**: `"news headlines"`, `"social media trending"`
74- **Blockchain**: `"DeFi TVL"`, `"on-chain analytics"`
75- **Scientific/Medical**: `"paper search API"`, `"clinical trials"`
76- **Weather/Location**: `"weather forecast"`, `"air quality"`, `"geocoding"`, `"navigation"`
77- **Generation/Processing**: `"text to image"`, `"TTS"`, `"OCR"`, `"video generation"`, `"PDF extraction"`
78- **Web extraction/Search**: `"web content extraction"`, `"web scraping"`, `"web search API"`
79
80### Known Tools Cache
81
82After a successful discovery and call, note the `tool_id` and working parameters in session memory or a local file. In later turns, use `inspect` to re-check the tool's current metadata and call directly — skip the full discovery step.
83
84---
85
86## Tool Selection and Parameters
87
88### Selection Criteria
89
90When `discover` returns multiple tools, evaluate before selecting:
91
92- **Success rate**: Prefer `success_rate` >= 90%. Treat 70–89% as acceptable. Avoid < 70% unless no alternative exists.
93- **Execution time**: Prefer `avg_execution_time_ms` < 5000 for interactive use. Compute-heavy tasks (image/video generation) may take longer.
94- **Parameter quality**: Prefer tools with clear parameter descriptions, sample values, and fewer required parameters.
95- **Output relevance**: Verify the tool returns the data format, region, market, or language you actually need.
96- **Execution history**: `has_last_execution` indicates a recorded execution, not certification of correctness or reliability. Evaluate it alongside the returned quality signals.
97
98### Before Calling a Tool
99
1001. **Read all parameter descriptions** from the discovery results — note type, format, constraints, and defaults
1012. **Fill all required parameters** and use the tool's sample parameters as a template for value structure
1023. **Validate types and formats**: strings quoted (`"London"`), numbers unquoted (`42`), booleans (`true`/`false`); check date format (ISO 8601 vs timestamp), identifier format (ticker symbol vs full name), geo format (lat/lng vs city name)
1034. **Extract structured values from the user's request** — do not pass natural language as a parameter value
104
105---
106
107## Error Recovery
108
109Failures can come from invalid inputs, authentication, rate limits, timeouts, or upstream services. Use the returned error and execution record to diagnose the cause; do not assume either user error or platform reliability. Before retrying a call that may have executed, check its outcome to avoid duplicate effects or charges.
110
111**Attempt 1 — Fix parameters**: Read the error message. Check types and formats. Fix and retry.
112
113**Attempt 2 — Simplify**: Drop optional parameters. Try standard values (e.g., well-known ticker). Retry.
114
115**Attempt 3 — Switch tool**: Select the next-best tool from discovery results. Call with appropriate parameters.
116
117**After 3 failed attempts**: Report honestly which tools and parameters were tried. Fall back to web search for data needs (mark the source). Do not fabricate.
118
119---
120
121## Large Result Handling
122
123Some tool calls may return `full_content_file_url` when the inline result is too large for the normal response body.
124
125- Treat `full_content_file_url` as a signal that the visible inline payload may be incomplete.
126- Do not make final claims from `truncated_content` alone when a full-content URL is present.
127- If your environment already has an approved way to retrieve the full content, use that separate tool or workflow.
128- If no approved retrieval path is available, tell the user that the result was truncated and that the full content is available via `full_content_file_url`.
129
130---
131
132## Quick Reference
133
134### Self-Check (before responding)
135
136- Am I about to **state a live number or need an external capability**? → Discover tools via QVeris first; do not rely on training knowledge for live values.
137- Am I about to **use web_search for structured data** (prices, rates, rankings, time series)? → Stop. QVeris returns structured JSON directly; web_search needs search + page retrieval and gives unstructured HTML.
138- Am I about to **give up, fabricate, or skip QVeris because it failed earlier**? → Re-engage. Inspect the returned error and execution outcome. Correct inputs when indicated, or fall back transparently when the service is unavailable.
139- Did the call result include `full_content_file_url`? → Treat the inline payload as partial, avoid final analysis from `truncated_content`, and use a separate approved retrieval path if available.
140
141### Common Mistakes
142
143| Mistake | Example | Fix |
144|---------|---------|-----|
145| Using web_search for structured data | Stock prices, forex rates, rankings via web_search | QVeris returns structured JSON; web_search gives unstructured HTML |
146| Number as string | `"limit": "10"` | `"limit": 10` |
147| Wrong date format | `"date": "01/15/2025"` | `"date": "2025-01-15"` (ISO 8601) |
148| Missing required param | Omitting `symbol` for a stock API | Always check required list |
149| Natural language or wrong format as param | `"query": "what is AAPL price"` or `"symbol": "Apple"` | Extract structured values: `"symbol": "AAPL"` |
150| Constructing API URLs manually | Directly calling `https://qveris.cn/...` | Use the script: `node scripts/qveris_tool.mjs call ...` |
151| Saying "I can't" or giving up after one failure | "I don't have real-time data" / abandoning after error | Discover first; follow Error Recovery on failure |
152| Fabricating data after failures | Presenting training-data values as live results | Report what was tried; fall back transparently |
153
154---
155
156## Quick Start
157
158### Discover tools
159```bash
160node scripts/qveris_tool.mjs discover "weather forecast API"
161```
162
163### Call a tool
164```bash
165node scripts/qveris_tool.mjs call openweathermap.weather.execute.v1 \
166 --discovery-id <id> \
167 --params '{"city": "London", "units": "metric"}'
168```
169
170### Inspect tool details by ID
171```bash
172node scripts/qveris_tool.mjs inspect openweathermap.weather.execute.v1
173```