Skip to main content
Glama
watsonx Platform MCP Server

watsonx Platform MCP Server

by manjotsidhu

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
WX_APIKEYNoIBM Cloud apikey (saas) or platform API key (cpd). Usually required; for cpd, WX_PASSWORD can be used instead.
WX_PASSWORDNoOptional. cpd fallback only, used instead of WX_APIKEY for the `/v1/authorize` bearer flow.
WX_USERNAMENocpd only. Required for cpd.
WX_VERIFY_SSLNoOptional, default `true`; set `false` to skip TLS verification for `WX_URL_OR_REGION`.
WX_ENVIRONMENTYesRequired. `saas` or `cpd`.
WX_URL_OR_REGIONYesRequired. For saas: region code (default `us-south`); for cpd: full cluster base URL.
WX_CA_BUNDLE_PATHNoOptional. Path to a CA bundle/cert to trust for `WX_URL_OR_REGION`, instead of disabling verification.
WX_PREFER_ZEN_API_KEYNoOptional, cpd only, default `true`.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

Product-agnostic access to IBM watsonx's Common Core Services (CCS): Projects, Assets, Connections, and Jobs — shared by every watsonx product (watsonx.ai, watsonx.data, DataStage, Pipelines, ...). Call authenticate first (or set WX_* env vars) before any other tool. Tools are grouped by confidence: auth/projects/assets(read+basic create)/connections/jobs(create+read) are production-confident, live-verified against a real CPD cluster and a SaaS dev tenant. upload_asset_file, update_job (schedule edits), job-run lifecycle tools, update_connection/delete_connection, and all project-member tools are EXPERIMENTAL — implemented from the spec's contract but not (or not fully) live-verified; treat their exact request/response shapes as provisional.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
authenticateA

Establish (or replace) this session's target environment and credentials.

All other tools operate against the current authenticated session — there is no per-call credential parameter. Calling this again replaces the session's target; v1 supports one active target per session, not multiple concurrent ones.

list_assetsC

Wraps POST /v2/asset_types/asset/search — envelope {total_rows, results} confirmed live. NOTE: the exact query-DSL field names used below (asset.asset_type / asset.name) are inferred from the general watsonx asset search pattern, not independently confirmed in the spec — only the response envelope shape itself is confirmed. Re-verify the filter syntax against a live cluster with real data if filtered results look wrong.

get_assetC

Full asset metadata document (attachments, attributes, relationships).

create_assetC

Generic asset creation — confirmed live at POST /v2/assets?project_id=... (not /transactional/v2/assets, which is 404). asset_id is present directly at the top level of the response, no defensive extraction needed for this one.

upload_asset_fileC

EXPERIMENTAL — Phase 3 / low-confidence (spec/02-tools.md).

Only the create-data-asset step is verified live. The attachment-creation body shape is from a real example request, not independently re-verified. The signed-URL PUT and "complete" steps are entirely unconfirmed — this implementation is a best-effort, defensive sequence that should be re-verified against a live cluster before being relied on. If it fails partway through, the data asset (and possibly a dangling attachment record) may be left behind — this tool does not attempt rollback.

list_connection_typesD

Wraps GET /v2/datasource_types.

create_connectionA

IMPORTANT: this call actively tests the supplied credentials against the live external system at creation time and fails with a non-standard HTTP 460 ("connection_test_failed", non-retryable) if they don't work — confirmed live. It cannot be used speculatively or with placeholder credentials; only call it with genuinely reachable external-system credentials. properties may contain secrets (e.g. an access key) — they are forwarded to the API but never echoed back in this tool's output.

list_connectionsD

Native envelope confirmed live: {resources: [], first: {href}, total_count} — a third, HAL-style pagination shape distinct from projects and asset search.

get_connectionD–
update_connectionC

EXPERIMENTAL — Phase 3, never tested at all (spec/02-tools.md). Assumes the same flat partial-object PATCH body as update_project; this is an assumption, not a confirmed fact — update_connection's PATCH format could just as easily match update_job's JSON-Patch-array format instead. Re-verify live once real external-system credentials are available to create a connection to test against.

delete_connectionD

EXPERIMENTAL — Phase 3, never tested at all (spec/02-tools.md).

list_job_runsC

EXPERIMENTAL — from an unverified example request. Wraps GET /v2/jobs/{id}/runs?project_id=...

get_job_runC

EXPERIMENTAL — from an unverified example request. Wraps GET /v2/jobs/{id}/runs/{run_id}?project_id=.... A related GET .../runs/{run_id}/logs endpoint was also seen but is not called here — not one of the 13 capabilities as a separate tool in v1.

cancel_job_runC

EXPERIMENTAL — from an unverified example request. Confirmed to be POST (not DELETE) in that example: POST /v2/jobs/{id}/runs/{run_id}/cancel?project_id=.... A separate DELETE .../runs/{run_id} endpoint also exists and is distinct from cancel (presumably deletes the run record instead of stopping it) — not exposed as its own tool in v1.

NOTE: confirm isn't listed in 02-tools.md's per-tool contract for this one, but 03-conventions.md's blanket destructive-operation rule ("any cancel_* tool requires confirm: true") applies here too — added for consistency with that stated hard requirement.

create_job_runA

EXPERIMENTAL — from an unverified example request. Wraps POST /v2/jobs/{id}/runs?project_id=..., body {"job_run": {...}} (confirmed wrapper key in that example — NOT {"run": {...}}). Returns immediately with the run's current state; does not block until completion (see spec/03-conventions.md "Async operations"). Poll get_job_run/list_job_runs.

create_jobC

Wraps POST /v2/jobs?project_id=... — confirmed live. Request body is {"job": {...}}.

update_jobC

EXPERIMENTAL for schedule edits — Phase 3 (spec/02-tools.md).

The JSON-Patch (RFC 6902) body format is confirmed live: PATCH /v2/jobs/{id} rejects a flat object and requires an array. BUT two separate live attempts to change an existing job's schedule via this PATCH (tried both /job/schedule and /schedule as the path) returned 200 without visibly changing the stored schedule value on a follow-up GET. Treat schedule edits made through this tool as unverified — name/ configuration edits use the same confirmed format but weren't the specific field that failed to change, so they're more likely to work.

list_jobsC

Wraps GET /v2/jobs?project_id=.... NOTE: the exact native pagination envelope for this endpoint isn't pinned down in the spec (only that the read path itself is confirmed reachable) — defensively checks the resources/results/items keys, matching whichever shape jobs (as assets) actually use.

get_jobD–
delete_jobC

Confirmed live: 204, via the dedicated /v2/jobs/{id} path (the generic asset-delete path also works, since jobs are assets, but this uses the dedicated form for clarity).

list_project_membersC

EXPERIMENTAL — untested. Wraps GET /v2/projects/{id}/members.

add_project_memberB

EXPERIMENTAL — untested. Wraps POST /v2/projects/{id}/members. identity is forwarded as-is (IAM id / username / service-id) — the exact expected request field name isn't confirmed; sent under a generically-named key.

update_project_memberC

EXPERIMENTAL — untested. Wraps PATCH /v2/projects/{id}/members/{member_id}. NOTE (unverified assumption): 02-tools.md's contract takes identity as input but the endpoint path uses {member_id} — no separate identity-to-member_id lookup is documented anywhere, so identity is used directly as the member_id path segment. This may be wrong; re-verify live.

remove_project_memberC

EXPERIMENTAL — untested. Wraps DELETE /v2/projects/{id}/members/{member_id}. Same unverified identity-as-member_id assumption as update_project_member.

list_projectsB

List projects, flattened to {id, name, description, created_at, updated_at, type, creator, public}.

get_projectB

Full project document. Redacted: entity.storage.properties.credentials and similarly-named secret fields are stripped — confirmed live that SaaS can embed real COS/S3 credentials here (see spec/03-conventions.md).

create_projectD–
update_projectC

PATCH with a flat, partial JSON object — confirmed live. NOTE: this PATCH body format is specific to projects; update_job needs a JSON Patch array instead (see spec/03-conventions.md).

delete_projectC

Confirmed live: 204, immediate, cascades to the project's assets/jobs (not independently verified whether it cascades to connections/members).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.5/5.0

Scored across 29 tools

Disambiguation4/5

Tools are mostly cleanly separated by resource+action (projects, connections, jobs, job runs, assets, members). Some conceptual overlap exists because jobs are a kind of asset (get_job vs get_asset, delete_job but no delete_asset) and the run sub-resources (create/get/list/cancel_job_run) sit close to the job tools, but descriptions clarify intent.

Naming Consistency4/5

Nearly all tools follow a predictable verb_noun snake_case pattern (list_projects, create_job_run, delete_connection). Minor deviations: members use add/remove_project_member while other resources use create/delete, and 'authenticate' is a bare verb with no noun.

Tool Count3/5

At 29 tools this sits above the comfortable range, and several are flagged EXPERIMENTAL/untested. The breadth is partly justified by covering six distinct sub-domains (projects, connections, jobs, runs, assets, members), but the surface feels heavy and could be trimmed.

Completeness4/5

Most resources have full lifecycle coverage: projects (CRUD), connections (CRUD + types), jobs (CRUD), job runs (create/get/list/cancel), and members (list/add/update/remove). The notable gap is generic assets, which have create/get/list but no update or delete, and no job-run logs tool.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues