Gemini deep research result
Skill zchee/mcp-gemini-search/skills/gemini-deep-research-result
Poll and retrieve Gemini Deep Research runs with the deep_research_result tool of the mcp-gemini-search MCP server. Use this skill whenever a deep_research run has been started and you hold an interaction_id — to check progress, wait for completion, fetch the finished Markdown report with its citations, or re-fetch a report from an earlier session. Also use it when the user asks "is the research done yet?", "get the report", or pastes an interaction_id.From its SKILL.md
npx -y skills add zchee/mcp-gemini-search --skill gemini-deep-research-resultAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.2 KB, as published. Nobody here has run it
deep_research_result (mcp-gemini-search)
deep_research_result fetches the current state of a Deep Research run by
interaction_id. It is the only correct way to check on or retrieve a
run — never start a new deep_research call to "check progress"; that starts
a second billed multi-minute run.
Calling contract
Input (additionalProperties: false):
| field | type | meaning |
|---|---|---|
interaction_id (required) | string | The id returned by deep_research. |
wait_seconds | integer 0–60 (default 0) | Seconds the server may hold the request, re-checking the run (~every 5s) before answering. |
Output: {"interaction_id", "status"} always; "text" and "sources" appear
only when status is "completed".
Polling discipline
Runs take several minutes. Always pass wait_seconds=60 when you are
waiting for completion — the server long-polls and each call then costs one
round-trip per minute instead of dozens of instant in_progress replies.
wait_seconds=0 is only for a true instant status peek (e.g. the user asked
"is it done yet?" and you should answer immediately).
The loop:
- Call with
wait_seconds=60. status == "in_progress"→ the report is not ready; call again the same way. If you have other useful work queued for the user, do it between polls rather than blocking on the loop.status == "completed"→ the report is intext; stop polling.- Tool error mentioning
failedorcancelled→ terminal; stop (see Errors).
Polling is cheap and idempotent — repeated deep_research_result calls never
mutate the run or incur a new research charge.
Reading a completed report
text is the full report as normalized Markdown: inline [n] citation
markers map to the numbered ## Sources section at the end. The structured
sources array mirrors those entries as
{"index": n, "title": "...", "uri": "https://..."} (title/uri may be absent
on some entries; sources may be absent when nothing was cited).
Reports are long. When relaying to the user, keep the citation markers and
the Sources section intact — the verifiability is the point of Deep
Research. Summarize on top of the report if asked, but always offer or
provide the full text. Include the interaction_id alongside the delivered
report: interactions persist ~55 days, and the id is what lets the user (or
a future session) re-fetch the full text without paying for a new run.
For a plan_only run, text contains the proposed research plan instead of
a report — show it to the user and approve/refine it via a deep_research
call with previous_interaction_id (see the gemini-deep-research skill).
Terminal failures
A failed or cancelled run surfaces as a tool error (not a normal
result): the message reads deep research failed: <detail> or
deep research cancelled: <detail>. These are terminal:
- Do not keep polling that
interaction_id. - Do not silently restart the research — a new
deep_researchrun is billed and slow. Report the failure detail to the user and let them decide.
Other errors:
Invalid arguments for deep_research_result: …— schema violation (e.g.wait_secondsout of 0–60); fix the call.interaction id cannot be empty— you lost the id; recover it from your notes or the conversation, do not invent one.deep research failed: <backend error>on an id you know is valid — a transient fetch failure is possible; retry the poll once before surfacing.
Ids outlive the session
Interactions are retained ~55 days on the paid tier, so an interaction_id
from an earlier conversation can still be fetched. If the user brings an id
from a past session, poll it directly — no need to re-run the research.