Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SDE_HOST | Yes | Your SD Elements instance URL (e.g., https://your-sdelements-instance.com) | |
| SDE_API_KEY | Yes | Your SD Elements API key |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projects | List all projects in SD Elements |
| get_project | Get details of a specific project. Use list_countermeasures to see countermeasures for a project, not this tool. |
| list_profiles | List all available profiles in SD Elements |
| list_risk_policies | List all available risk policies in SD Elements |
| get_risk_policy | Get details of a specific risk policy |
| create_project | Create a new project in SD Elements. If name is not specified, prompts user to provide it. If profile is not specified, attempts to detect it from project name/description (e.g., 'mobile project' → Mobile profile). If detection fails, prompts user to select from available profiles. |
| update_project | 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. |
| delete_project | Delete a project. Use when user says 'delete', 'remove', 'archive', or wants to permanently remove a project. Do NOT use update_project for archiving. |
| create_project_from_code | Create application and project in SD Elements. Returns the project survey structure with all available questions and answers. IMPORTANT: Before determining survey answers, the AI client MUST search the workspace codebase for evidence of survey answers and security requirements. |
| list_applications | List all applications |
| get_application | Get details of a specific application |
| create_application | Create a new application |
| update_application | Update an existing application |
| list_business_units | List all business units |
| get_business_unit | Get details of a specific business unit |
| list_countermeasures | List all countermeasures for a project. Use this to see countermeasures associated with a project, not get_project which returns project details. |
| get_countermeasure | Get details of a SPECIFIC countermeasure by its ID. Use this when the user asks about a particular countermeasure (e.g., "countermeasure 123", "T21", "countermeasure 456"). Accepts countermeasure ID as integer (e.g., 21) or string (e.g., "T21" or "31244-T21"). Filter by risk relevance - if true, only return risk-relevant countermeasures. Defaults to true. Do NOT use this tool when the user asks about available status choices or what statuses are valid - use get_task_status_choices instead. |
| update_countermeasure | Update a countermeasure (status or notes). Use when user says 'update status', 'mark as complete', or 'change status'. Do NOT use for 'add note', 'document', or 'note' - use add_countermeasure_note instead. Accepts countermeasure ID as integer (e.g., 21) or string (e.g., "T21" or "31244-T21"). Status can be provided as name (e.g., 'Complete', 'Not Applicable'), slug (e.g., 'DONE', 'NA'), or ID (e.g., 'TS1'). The tool will automatically resolve names/slugs to the correct status ID required by the API. IMPORTANT: The 'notes' parameter sets a status_note, which is only saved when the status actually changes. If the countermeasure already has the target status, use add_countermeasure_note instead to add a note, or change the status to a different value first, then back to the target status to trigger saving the status_note. |
| add_countermeasure_note | Add a note to a countermeasure. Use when user says 'add note', 'document', 'note that', 'record that', or wants to add documentation. Use update_countermeasure if user wants to change status. Accepts countermeasure ID as integer (e.g., 21) or string (e.g., "T21" or "31244-T21"). IMPORTANT: Use this tool when adding notes to countermeasures that already have the target status. The update_countermeasure tool's 'notes' parameter only saves status_note when the status actually changes. For countermeasures that already have the desired status, always use add_countermeasure_note to ensure the note is saved. |
| get_task_status_choices | Get the complete list of ALL available task status choices. Returns all valid status values that can be used when updating countermeasures (e.g., 'Complete', 'Not Applicable', 'In Progress', 'DONE', 'NA'). Use this tool when the user asks: "What task statuses are available?", "What statuses can I use?", "Show me valid status values", "What status values are valid for countermeasures?", or any question about available/valid status options. Task statuses are standardized across all projects. This tool returns the list of possible statuses, NOT the status of a specific countermeasure. For a specific countermeasure's status, use get_countermeasure instead. |
| get_project_survey | Get the complete survey structure for a project (all available questions and ALL possible answers). Use this to see what survey questions exist and what answers are available. Use get_survey_answers_for_project to see only the answers that are currently selected for a project. |
| update_project_survey | Update project survey with answer IDs. Selects answers in 'answers' list and optionally deselects answers in 'answers_to_deselect' list. |
| find_survey_answers | Find survey answers by text |
| set_project_survey_by_text | Set/REPLACE all project survey answers by text. This REPLACES all existing answers with the new ones. Use ONLY when user wants to completely replace all answers. Use add_survey_answers_by_text if user says 'add' or wants to keep existing answers. If replace_all is True (default), deselects all current answers not in the new list. If False, only selects the new answers without deselecting existing ones. |
| remove_survey_answers_by_text | Remove survey answers by text. This explicitly deselects the specified answers while keeping all other answers unchanged. |
| add_survey_answers_by_text | ADD survey answers by text to existing answers. Use when user says 'add', 'include', or wants to add to existing answers. This ADDS new answers while preserving all existing ones. Use set_project_survey_by_text ONLY if user explicitly wants to REPLACE all answers. |
| get_survey_answers_for_project | Get the survey answers FOR A PROJECT that are currently selected/assigned. Use when user asks 'show me the survey answers for project X', 'what answers are set for project', 'survey answers for project', or 'current answers for project'. Returns only the answers that are currently selected for the project, not all available answers. Use get_project_survey to see the full survey structure with all available questions and answers. |
| commit_survey_draft | Commit the survey draft to publish the survey and generate countermeasures |
| add_survey_question_comment | Add a comment to a survey question. Use this to explain why specific answers were selected for a question, providing context and justification for survey answer choices. This is especially useful when setting project survey answers to document the reasoning behind answer selections. Example: Add a comment to question Q1 in project 123 explaining that Python was selected because the project uses Django. |
| list_users | List all users |
| get_user | Get details of a specific user |
| get_current_user | Get current authenticated user |
| list_scan_connections | List repository scan connections |
| scan_repository | Scan a repository |
| get_scan_status | Get status of a repository scan |
| list_scans | List repository scans |
| list_project_diagrams | List diagrams for a project |
| get_diagram | Get details of a specific diagram |
| create_diagram | Create a new diagram |
| update_diagram | Update a diagram |
| delete_diagram | Delete a diagram |
| list_advanced_reports | List all advanced reports |
| get_advanced_report | Get details of a specific advanced report |
| update_advanced_report | Update an existing advanced report. Provide only the fields you want to update. The query and chart_meta parameters can be JSON strings or objects. |
| run_advanced_report | Run an advanced report |
| create_advanced_report | Create a new advanced report. The query parameter can be a JSON string or object with schema, dimensions, measures, filters, order, and limit. The chart_meta parameter can be a JSON string or object if provided. Example query: {"schema": "application", "dimensions": ["Project.name"], "measures": ["Task.count"]} Example chart_meta: {"columnOrder": ["Project.name", "Task.count"]} |
| execute_cube_query | Execute a Cube API query for advanced analytics. The query parameter can be a JSON string or object. Query structure (see https://docs.sdelements.com/master/cubeapi/):
Example: {"schema": "application", "dimensions": ["Application.name"], "measures": ["Project.count"], "limit": 10} |
| api_request | Make a generic API request to a custom endpoint. Use when user says 'make a GET/POST/PUT/DELETE request', 'call API endpoint', or 'custom API call'. Do NOT use for specific operations - use dedicated tools like get_project instead. |
| test_connection | Test the connection to SD Elements API. Use this to verify API connectivity and credentials, not for making API calls. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |