galaxyproject / galaxyproject/loom
Orbit/Galaxy MCP: `galaxy_run_tool` docs say `dataset_id` but only the HDA `id` works -- wrong field yields a misleading "Required parameter(s) kwd not provided" error
- Dominant language
- TypeScript
- Stars
- 14
- Forks
- 12
- Avg merge
- 6d 5h
- Merged PRs (30d)
- 17
Description
**Reported via beta feedback (v0.5.1, macOS/arm64, deepseek).** Tester hit this running RepeatMasker, then reproduced it on `cat1` -- so it's not tool-specific.
## The ambiguity
`galaxy_run_tool`'s docs say to pass inputs as:
```json
{"input_name": {"src": "hda", "id": "dataset_id"}}
```
The literal word **`dataset_id`** is the problem. `galaxy_get_history_contents` returns *two* distinct id fields per item:
| field | role |
|---|---|
| `id` | the HDA id -- the history/content association |
| `dataset_id` | the underlying dataset id |
Only the **HDA `id`** works in `run_tool`. A user reading the docs literally reaches for the field actually named `dataset_id` and it fails. The MCP gotchas file already says the right thing ("`id` = hex hash used in API calls"), so the `run_tool` docs contradict it.
**Fix:** say "the `id` field from `galaxy_get_history_contents` (the HDA id) -- *not* the `dataset_id` field" and use a placeholder like `` in the example instead of the word `dataset_id`.
## The misleading error (the expensive half)
Passing the wrong id in `{"src":"hda","id":"..."}` form makes Galaxy return:
```
Required parameter(s) kwd not provided in request
```
That's simply wrong -- every parameter *was* provided; the id just didn't resolve. It sent the tester through six different input shapes (arrays, unflattened nested objects, boolean-as-string, array-wrapped booleans) before they realized the id was at fault. The structural examples in the error output show test-format arrays like `"input1": ["1.bed"]`, which muddied it further.
Notably, passing a bad id in *array* form (`["wrong_id"]`) produces a much better error: `invalid dataset id`. The `{"src":"hda","id":...}` path should produce that same clear error.
**Fix direction:** validate/resolve the id in `galaxy_run_tool` before dispatch and surface "invalid dataset id" (ideally naming which input), rather than letting it surface as "kwd not provided."
## Notes
- Doc wording is the cheap, contained fix; the error-surfacing half may need a Galaxy-side or MCP-side resolve-and-validate step.
- Related: #348 (HID -> encoded-id resolution, opaque "Invalid id length"), #208 (`galaxy_run_tool` collection-vs-single input).
- Galaxy MCP lives outside this repo; filing here to keep the feedback trail in one place.
_(Beta tester feedback; ids/paths anonymized.)_
Contributor guide
No contributing guide indexed for this repository
Research direction
Start at the galaxy_run_tool entry point and compare its input documentation with the galaxy_get_history_contents fields and the MCP gotchas guidance. Update the example to use an HDA id placeholder and explicitly distinguish id from dataset_id. Then trace the hda-id validation or resolution path so an invalid id reports a clear error instead of "kwd not provided".
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, backend, documentation
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100