Skip to main content
Glama

update_project

Modify project details such as name, description, and status using the project ID. Integrates with SD Elements MCP Server for streamlined security development lifecycle management.

Instructions

Update an existing project

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
descriptionNoUpdated project description
nameNoUpdated project name
project_idYesThe ID of the project to update
statusNoProject status

Implementation Reference

  • Implements the 'update_project' MCP tool handler. Decorated with @mcp.tool() for automatic registration. Validates inputs, especially risk_policy ID, constructs update data, calls api_client.update_project, and returns JSON result or error.
    @mcp.tool() async def update_project(ctx: Context, project_id: int, name: Optional[str] = None, description: Optional[str] = None, status: Optional[str] = None, risk_policy: Optional[Union[int, str]] = None) -> str: """Update an existing project (name, description, status, or risk_policy). Use when user says 'update', 'change', 'modify', or 'rename'. Do NOT use for 'archive', 'delete', or 'remove' - use delete_project instead. IMPORTANT: risk_policy must be the numeric ID of the risk policy (e.g., 1, 2, 3), not the name. Use list_risk_policies to find the correct ID. According to the API documentation (https://docs.sdelements.com/master/api/docs/projects/), risk_policy is an optional field that accepts the ID of the Risk Policy that applies to this project.""" global api_client if api_client is None: api_client = init_api_client() # Validate risk_policy is an integer if provided if risk_policy is not None: # Handle string-to-int conversion (MCP framework may pass as string) if isinstance(risk_policy, str): try: risk_policy = int(risk_policy) except ValueError: return json.dumps({ "error": f"risk_policy must be an integer ID, got string that cannot be converted: {risk_policy}", "suggestion": "Use list_risk_policies to find the correct risk policy ID (numeric value)" }, indent=2) elif not isinstance(risk_policy, int): return json.dumps({ "error": f"risk_policy must be an integer ID, got {type(risk_policy).__name__}: {risk_policy}", "suggestion": "Use list_risk_policies to find the correct risk policy ID (numeric value)" }, indent=2) data = {} if name is not None: data["name"] = name if description is not None: data["description"] = description if status is not None: data["status"] = status if risk_policy is not None: data["risk_policy"] = risk_policy if not data: return json.dumps({"error": "No update data provided. Specify at least one field to update (name, description, status, or risk_policy)."}, indent=2) try: result = api_client.update_project(project_id, data) return json.dumps(result, indent=2) except Exception as e: error_msg = str(e) # Check if it's a risk_policy related error if "risk_policy" in error_msg.lower() or "risk policy" in error_msg.lower(): return json.dumps({ "error": f"Failed to update risk_policy: {error_msg}", "suggestion": "Verify the risk_policy ID exists using list_risk_policies. Risk policy must be a valid numeric ID." }, indent=2) return json.dumps({"error": f"Failed to update project: {error_msg}"}, indent=2)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/geoffwhittington/sde-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server