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

Open
#375 0 comments 1 reaction 0 assignees View on GitHub
bug
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.