Skip to main content
Glama
unstrike
by unstrike

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
AF_HOSTNAMEYesYour AttackForge instance hostname
X_SSAPI_KEYYesYour SSAPI key

Instructions

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

This server publishes no instructions, or was last inspected before Glama recorded them.

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
raw_requestB

Make a raw request to any AttackForge SSAPI endpoint.

Args: method: HTTP method (GET, POST, PUT, DELETE, PATCH) endpoint: SSAPI path, e.g. "/vulnerabilities" or "/project/123/testcases" params: Optional query string parameters body: Optional JSON request body

projectsA

Manage AttackForge projects.

Actions: list — GET /projects (summary; optional: limit default 25) Returns total + has_more. Use projects.get for full detail. get — GET /project/:id (requires: id) create — POST /project (requires: fields) update — PUT /project/:id (requires: id, fields) clone — POST /project/:id/clone (requires: id) archive — PUT /project/:id/archive (requires: id) restore — PUT /project/:id/restore (requires: id) get_notes — GET /project/:id/notes (requires: id) create_note — POST /project/:id/note (requires: id, note_content) update_note — PUT /project/:id/note/:noteId (requires: id, note_id, note_content) workspace — GET /project/:id/workspace (requires: id)

vulnerabilitiesA

Manage AttackForge vulnerabilities.

Actions: list — GET /vulnerabilities (summary only; optional: project_id, limit default 25) Prefer project_id scope — global list can return 500+ items. Returns total + has_more. Use get for full text fields. get — GET /vulnerability/:id (requires: id; returns full detail) list_by_asset — GET /vulnerabilities/asset (requires: asset_name) create — POST /vulnerability (requires: fields incl. project_id) update — PUT /vulnerability/:id (requires: id, fields) bulk_create — POST /vulnerability/bulk (requires: project_id, items=[{...},...]) summarize_custom_fields — Scan all vulns in a project and return each custom field key with its distinct non-empty values. (requires: project_id) Optional: fields={"key": "apmid"} to filter to one field. Use this to discover what custom fields an org uses before querying by value — works for any AF instance, not just T-Mobile. list_by_custom_field — Return slimmed vuln summaries where a custom field matches a value. (requires: project_id, fields={"key": "...", "value": "..."}) Optional: limit (default 25).

Key fields for create: projectId (camelCase, required), title (required), affected_asset_name (required), priority (required), description (required), attack_scenario (required), remediation_recommendation (required), steps_to_reproduce (required), tags, notes=[{note, type}], is_zeroday, is_visible, custom_fields=[{key, value}], linked_testcases, custom_tags=[{name, value}]. Key fields for update: project_id (snake_case), title, priority, status, likelihood_of_exploitation, description, attack_scenario, remediation_recommendation, steps_to_reproduce, tags, notes=[{note, type}], is_zeroday, is_visible, is_deleted, custom_fields=[{key, value}], linked_testcases, custom_tags=[{name, value}].

testsuitesB

Manage AttackForge testsuite libraries.

Actions: list — GET /testsuites get — GET /testsuites/:id (requires: id) create — POST /testsuite (requires: fields: name, description) update — PUT /testsuite/:id (requires: id, fields) add_testcase — POST /testsuite/:id/testcase (requires: id, fields) add_testcases — POST /testsuite/:id/testcases (requires: id, items=[{...},...]) update_testcase — PUT /testsuite/:id/testcase/:testcase_id (requires: id, testcase_id, fields)

testcasesA

Manage test cases assigned to AttackForge projects.

Actions: list — GET /project/:project_id/testcases (requires: project_id) Optional: limit (default 50). Returns total + has_more. assign — POST /project/:project_id/testcase (requires: project_id, fields) update — PUT /project/:project_id/testcase/:testcase_id (requires: project_id, testcase_id, fields) Key fields: status (Tested/Not Tested), linked_vulnerabilities add_note — POST /project/:project_id/testcase/:testcase_id/note (requires: project_id, testcase_id, note) analytics — GET /analytics/failed/testcases

assetsA

Manage assets in AttackForge (project scope and library).

Actions: list — GET /assets (all user assets; optional: limit, default 100) list_by_group — GET /assets/group/:id (requires: id = group_id) create_on_project — POST /project/:project_id/assets (requires: project_id, items=[{asset_name, asset_type,...},...]) update_on_project — PUT /project/:project_id/asset/:asset_id (requires: project_id, asset_id, fields) list_library — GET /library/assets get_library — GET /library/asset (params via fields) create_library — POST /library/asset (requires: fields) update_library — PUT /library/asset/:id (requires: id, fields)

remediationB

Manage remediation notes on AttackForge vulnerabilities.

Actions: create_note — POST /vulnerability/:vulnerability_id/remediationNote (requires: vulnerability_id, fields) Key fields: projectId (required), note (required), note_type ("PLAINTEXT" or "RICHTEXT") update_note — PUT /vulnerability/:vulnerability_id/remediationNote/:note_id (requires: vulnerability_id, note_id, fields)

analyticsA

Query AttackForge analytics endpoints.

Actions: failed_testcases — GET /analytics/failed/testcases vulnerable_assets — GET /analytics/vulnerable/assets (top 100 by vuln count) common_vulns — GET /analytics/common/vulnerabilities (top 50 by count)

reportsA

Generate and retrieve AttackForge project reports.

Actions: get_data — POST /project/:project_id/report/:report_type (requires: project_id, report_type, optional options) report_type examples: pentest, vulnerability, executive get_report — GET /project/:project_id/report/:report_type (requires: project_id, report_type)

utilsA

AttackForge utility functions.

Actions: markdown_to_richtext — POST /utils/markdown-to-richtext (requires: markdown) Convert markdown to AF rich text format. Use before setting description/recommendation/note fields. get_form_config — GET /config/form/:config_type (requires: config_type e.g. "vulnerability", "project")

cacheA

Manage the local SQLite cache for static AF data.

Actions: stats — list all cache entries with key, age_seconds, ttl_seconds, expired invalidate — delete by key (or all entries if no key given)

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 11 tools

Disambiguation3/5

Tools are mostly separated by AttackForge resource (projects, vulnerabilities, testcases, assets, etc.), and action lists clarify intended use. However, raw_request overlaps every domain tool, and testcases.analytics duplicates analytics.failed_testcases, creating avoidable ambiguity. Other boundaries like project notes vs. remediation notes and assets project/library scope are readable but require care.

Naming Consistency4/5

Tool names consistently use lowercase snake_case domain nouns (projects, vulnerabilities, testsuites, assets), with raw_request as the main deviation. Action names are also mostly snake_case, though there are minor style differences such as list vs. list_by_asset vs. add_testcase/add_testcases. The convention is predictable overall despite not using a strict verb_noun tool-name pattern.

Tool Count5/5

Eleven tools is well-scoped for a broad AttackForge API surface, and each tool maps to a clear domain or capability. The action-dispatch design keeps the top-level tool count manageable while still exposing many operations. No tool appears redundant enough to warrant removal beyond the raw_request escape hatch.

Completeness4/5

The surface covers core AttackForge workflows across projects, vulnerabilities, test suites, test cases, assets, remediation notes, analytics, reports, utilities, and caching. raw_request ensures practically any missing SSAPI endpoint is reachable, though direct delete/lifecycle operations are not uniformly exposed for every resource. A few overlaps and the absence of dedicated user/admin endpoints prevent a perfect score.

Maintenance

ActivityInactive
ResponsivenessNo issues