watson_get_model
Retrieve details of a specific foundation model by providing its model ID and optional region.
Instructions
Get details of a specific foundation model
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | Model ID (e.g. ibm/granite-13b-instruct-v2) | |
| region | No |
Implementation Reference
- src/tools/watson/index.ts:17-19 (handler)The tool handler for 'watson_get_model' — makes a GET request to the Watson ML API endpoint for foundation model specs, filtering by model_id. Uses safeTool for error handling and client.get to perform the authenticated API call.
server.tool("watson_get_model", "Get details of a specific foundation model", { model_id: z.string().describe("Model ID (e.g. ibm/granite-13b-instruct-v2)"), region: z.string().optional(), }, async (p) => safeTool(() => client.get(`${ml(p.region||r)}/ml/v1/foundation_model_specs`, {version:ver,filters:`modelid_${p.model_id}`}))); - src/tools/watson/index.ts:17-19 (schema)The input schema for 'watson_get_model' defines two parameters: 'model_id' (required string, describes the model ID like ibm/granite-13b-instruct-v2) and 'region' (optional string).
server.tool("watson_get_model", "Get details of a specific foundation model", { model_id: z.string().describe("Model ID (e.g. ibm/granite-13b-instruct-v2)"), region: z.string().optional(), }, async (p) => safeTool(() => client.get(`${ml(p.region||r)}/ml/v1/foundation_model_specs`, {version:ver,filters:`modelid_${p.model_id}`}))); - src/tools/watson/index.ts:7-68 (registration)Registration function 'registerWatsonTools' which registers all watson* tools including 'watson_get_model' on the MCP server via server.tool(). Called from src/server.ts line 68.
export function registerWatsonTools(server: McpServer, client: IBMCloudAPIClient, config: ServerConfig) { const ml = (r: string) => IBM_ENDPOINTS.WATSON_ML(r); const w = () => assertWriteAllowed(config.allowWrite); const r = config.region; const ver = "2024-05-01"; server.tool("watson_list_models", "List available foundation models on watsonx.ai", { region: z.string().optional(), }, async (p) => safeTool(() => client.get(`${ml(p.region||r)}/ml/v1/foundation_model_specs`, {version:ver,limit:200}))); server.tool("watson_get_model", "Get details of a specific foundation model", { model_id: z.string().describe("Model ID (e.g. ibm/granite-13b-instruct-v2)"), region: z.string().optional(), }, async (p) => safeTool(() => client.get(`${ml(p.region||r)}/ml/v1/foundation_model_specs`, {version:ver,filters:`modelid_${p.model_id}`}))); server.tool("watson_generate_text", "Generate text using a watsonx.ai foundation model", { model_id: z.string().describe("Model ID"), input: z.string().describe("Input prompt"), project_id: z.string().describe("watsonx project ID"), max_new_tokens: z.number().optional().describe("Max tokens to generate (default 200)"), temperature: z.number().optional().describe("Temperature 0-2 (default 0.7)"), top_p: z.number().optional(), top_k: z.number().optional(), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); return client.post(`${ml(p.region||r)}/ml/v1/text/generation`, { model_id:p.model_id, input:p.input, project_id:p.project_id, parameters:{max_new_tokens:p.max_new_tokens||200, temperature:p.temperature||0.7, top_p:p.top_p, top_k:p.top_k}, }, {version:ver}); })); server.tool("watson_list_deployments", "List model deployments in a space", { space_id: z.string().describe("Deployment space ID"), region: z.string().optional(), }, async (p) => safeTool(() => client.get(`${ml(p.region||r)}/ml/v4/deployments`, {version:ver,space_id:p.space_id}))); server.tool("watson_deploy_model", "Deploy a model to a space", { name: z.string(), space_id: z.string(), asset_id: z.string().describe("Model asset ID"), online: z.boolean().optional().describe("Online inference (default true)"), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); return client.post(`${ml(p.region||r)}/ml/v4/deployments`, { name:p.name, space_id:p.space_id, asset:{id:p.asset_id}, online:p.online!==false ? {} : undefined, }, {version:ver}); })); server.tool("watson_delete_deployment", "Delete a model deployment", { deployment_id: z.string(), space_id: z.string(), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); await client.delete(`${ml(p.region||r)}/ml/v4/deployments/${p.deployment_id}`, {version:ver,space_id:p.space_id}); return {message:"Deployment deleted"}; })); server.tool("watson_list_spaces", "List Watson deployment spaces", { region: z.string().optional(), }, async (p) => safeTool(() => client.get(`${ml(p.region||r)}/v2/spaces`, {version:ver}))); server.tool("watson_create_space", "Create a Watson deployment space", { name: z.string(), description: z.string().optional(), compute_name: z.string().optional().describe("WML instance CRN"), region: z.string().optional(), }, async (p) => safeTool(async () => { w(); const body: Record<string,unknown> = {name:p.name, description:p.description}; if(p.compute_name) body.compute=[{name:p.compute_name,type:"machine_learning"}]; return client.post(`${ml(p.region||r)}/v2/spaces`, body, {version:ver}); })); } - src/server.ts:13-13 (registration)Import of registerWatsonTools from the watson tool module.
import { registerWatsonTools } from "./tools/watson/index.js"; - src/server.ts:68-69 (registration)Invocation of registerWatsonTools to register all watson tools on the MCP server, including watson_get_model.
registerWatsonTools(server, client, config); console.error(` ✓ Watson AI (8 tools)`);