For the complete documentation index, see llms.txt. This page is also available as Markdown.

AI MCP and Skills

Overview

Model Context Protocol (MCP) is an open-source standard developed by Anthropic that enables AI assistants to securely connect to AttackForge with external data sources and tools.

MCP transforms AI from a conversational knowledge base into a practical assistant that can work with your actual AttackForge data and tools to get real work done, fast!

Skills are reusable packages of instructions, scripts, and resources that teach an AI model how to perform a specific task well. Think of them like specialized playbooks the AI loads on demand.

AttackForge build AI Skills to help your AI models perform tasks in a standardized way, with better and more consistent output and easier maintenance and iteration.

MCP has significant benefits for AttackForge users:

1. Better Confidentiality and Control

Data Stays Where It Belongs

With MCP, your sensitive vulnerability data doesn't need to be sent to AI providers for training. Your AI accesses your data when needed and only for your specific requests. You can even use AI models which are local to your computer, so that data never leaves your computer.

Granular Permissions

You control exactly what data and capabilities the AI can access on behalf of any AttackForge user you authorize to use MCP, ensuring appropriate boundaries and compliance with your security requirements.

2. More Helpful and Accurate Responses

Access to Current AttackForge Information

Instead of being limited to training data, AI assistants using MCP can pull real-time information from AttackForge - for example access to your latest vulnerabilities and projects. This provides context and answers based on your latest data, not outdated information in pre-trained vendor AI models.

Personalized Assistance

MCP enables AI to access your specific context - your AttackForge vulnerabilities, writeups, assets, projects - making responses tailored to your actual situation rather than generic advice.

3. Greater Productivity

Unified Interface

Instead of switching between different APIs and creating complex scripts, you can interact with your AttackForge through a single conversational interface. Ask questions about your data, retrieve records, check statuses, all in one place.

Automated Workflows

The AI can perform multi-step tasks, like pulling data from AttackForge, analyzing it, and updating a spreadsheet or creating a presentation - all from a simple request.

4. Future-Proof Investment

Vendor Independence

If you build workflows using MCP, you're not locked into a specific AI provider (vendor supplied AI models). You can switch AI assistants while keeping all your integrations working.

Growing Ecosystem

As AttackForge continues to build more MCP tools and skills, you'll automatically gain access to new capabilities without needing custom development work and extensive professional services.

Enabling MCP

To get started with MCP:

  • AttackForge Enterprise - MCP is available with your licence.

  • AttackForge Core - MCP can be add-on from Administration > Subscriptions

To enable MCP - go to Administration > Integrations and enable the toggle for MCP.

IMPORTANT: When MCP is enabled, access to MCP Tools is not yet available. Each tool must be enabled by an AttackForge administrator on a per-user basis for maximum security.

Configuring Remote MCP

Remote MCP are remote Model Context Protocol servers that are hosted on the internet rather than on your local machine. Remote MCP servers extend AI applications' capabilities beyond your local environment, providing access to internet-hosted tools, services, and data sources. Unlike local MCP servers that run on your computer, remote servers are accessible from any MCP client with an internet connection.

The key advantage of remote MCP servers is their accessibility - unlike local servers that require installation and configuration on each device. This makes them particularly useful for web-based AI applications (like AttackForge) and services that require server-side processing or authentication.

Remote MCP servers expose tools, prompts, and resources that AI assistants can use. These servers can integrate with various services such as AttackForge.

AttackForge has a built-in OAuth v2.1 service which is used to authenticate users connecting to AttackForge MCP. Every AttackForge user connecting to AttackForge via remote MCP must explicitly grant the AI assistant permission to do so on behalf of the user.

Self Registration

Self registration allows AttackForge users to register their AI assistant to use AttackForge MCP directly. This saves time and effort for AttackForge administrators having to manually create OAuth2 Client IDs and Client Secrets and having to share that information with enrolling users.

Self registration is handled using the built-in AttackForge OAuth2 Authorization Server which comes with every AttackForge tenant, and is made available when MCP is enabled in AttackForge.

To enable self registration - go to Administration > Integrations > MCP and toggle to option to enable self registration.

IMPORTANT: When Self Registration is enabled, access to MCP Tools is not yet available. Each tool can be enabled on a per-user basis by the AttackForge administrators for maximum security.

Microsoft Copilot Studio Self Registration

  1. Log in to Microsoft Copilot Studio. Select Agents > Create blank agent

  1. Click on Tools > Add a tool

  1. Click on Model Context Protocol > New tool

  1. Click on Model Context Protocol

  1. Enter in a name for your connecter. For the Server URL this should be in the following format: https://{{ATTACKFORGE-HOSTNAME}}/mcp . Select OAuth 2.0 for Authentication. Select Dynamic discovery for Type. Click Add.

  1. Click on Create new connection

  1. Click Create. You will be redirected to AttackForge. If you are not logged in - you will first need to log in. After you have logged in - you will see the screen below. Click on Agree and Continue. You will then be redirected back to Copilot Studio.

  1. You should see a successful connection. Click on Add and configure.

  1. Your agent should now be connected to AttackForge.

  1. Click on Tools. Configure the Tools you want to use.

  1. Try a prompt. If you see an error Let's get you connected first, and then I can find that info for you - click on the link to Open connection manager and click Connect. Otherwise your prompt should work!

ChatGPT Self Registration

  1. Log in to ChatGPT and from the menu - select Workspace settings

  1. Select Apps & Connectors

  1. Click on Create

  1. Enter in a name for your connecter. For the MCP Server URL this should be in the following format: https://{{ATTACKFORGE-HOSTNAME}}/mcp . Click Create.

  1. You will be redirected to AttackForge. If you are not logged in - you will first need to log in. After you have logged in - you will see the screen below. Click on Agree and Continue. You will then be redirected back to ChatGPT.

  1. Click Publish

  1. Review and actions then click Publish

  1. AttackForge MCP will now be available.

  1. Try the integration by going to a new chat. Click on + and select More. Select the AttackForge connector, then try a prompt!

Claude Self Registration

  1. Log in to Claude and from the menu - select Settings

  1. Select Connectors

  1. Select Add custom connector

  1. Enter in a name for your connecter. For the MCP Server URL this should be in the following format: https://{{ATTACKFORGE-HOSTNAME}}/mcp . Click Add.

  1. Click Connect

  1. You will be redirected to AttackForge. If you are not logged in - you will first need to log in. After you have logged in - you will see the screen below. Click on Agree and Continue. You will then be redirected back to Claude.

  1. Try the integration by going to a new chat. Click on Settings and enable the AttackForge connector, then enabled the relevant tools you have access to. Try a prompt!

Assisted Registration

If self registration is disabled - AI assistants can still get access to AttackForge MCP using assisted registration. The process is as follows:

  1. AttackForge admin manually registers the AI assistant for the required AttackForge user. This process results in the creation of an OAuth 2 Client Id and Client Secret which is then shared with the AttackForge user.

  2. AttackForge user supplies the Client Id and Client Secret to their AI assistant to configure the integration.

Manually Registering MCP Clients

  1. Go to Users > (Select the user) > Applications > MCP Client

  1. Click on Add Client. Include a name for the client and insert the redirect URLs. Click Add

TIP: Click on the down arrow to see common redirect URLs for popular remote MCP clients

  1. Copy the Client Id and Client Secret.

IMPORTANT: The Client Secret will only be shown one time. Make sure to copy it.

Manually Enrolling ChatGPT

  1. Log in to ChatGPT and from the menu - select Workspace settings

  1. Select Apps & Connectors

  1. Click on Create

  1. Enter in a name for your connecter. For the MCP Server URL this should be in the following format: https://{{ATTACKFORGE-HOSTNAME}}/mcp . Enter in the OAuth 2 Client Id and Client Secret. Click Create.

  1. You will be redirected to AttackForge. If you are not logged in - you will first need to log in. After you have logged in - you will see the screen below. Click on Agree and Continue. You will then be redirected back to ChatGPT.

  1. Click Publish

  1. Review and actions then click Publish

  1. AttackForge MCP will now be available.

  1. Try the integration by going to a new chat. Click on + and select More. Select the AttackForge connector, then try a prompt!

Manually Enrolling Claude

  1. Log in to Claude and from the menu - select Settings

  1. Select Connectors

  1. Select Add custom connector

  1. Enter in a name for your connecter. For the MCP Server URL this should be in the following format: https://{{ATTACKFORGE-HOSTNAME}}/mcp . Click Advanced Settings. Enter in the OAuth 2 Client Id and Client Secret. Click Add.

  1. Click Connect

  1. You will be redirected to AttackForge. If you are not logged in - you will first need to log in. After you have logged in - you will see the screen below. Click on Agree and Continue. You will then be redirected back to Claude.

  1. Try the integration by going to a new chat. Click on Settings and enable the AttackForge connector, then enable the relevant tools you have access to. Try a prompt!

Configuring Local MCP

Local MCP are local Model Context Protocol servers that run directly on your machine rather than connecting to remote services, like Claude Desktop and LM Studio.

The key advantages of local MCP servers include:

  • Complete Data Privacy: Local servers process data on your device, offering complete data privacy since information never leaves your machine.

  • Offline Functionality: Local servers work without internet connectivity once downloaded, which is crucial for developers working in secure environments or areas with unreliable internet access.

  • Predictable Performance: Local servers offer predictable performance since they're not dependent on network latency or external service availability.

Local MCP is particularly valuable for sensitive data processing, secure enterprise environments, and scenarios where you need AI capabilities without relying on external services.

LM Studio Configuration

  1. Download and install LM Studio

  1. Open LM Studio. Load your model. Click on Settings > Program > Install > Edit mcp.json

  1. Open mcp.json tab. Add the following local MCP server. Make sure to add your AttackForge hostname for the "AF_HOSTNAME" and your AttackForge User API Key for the "AF_USER_KEY".

  1. Click Save when finished and you should see the following success message.

  1. Open a new chat. Enable mcp/af-mcp-server. Configure the AF MCP tools you want to run, then try a test prompt!

Claude Desktop Configuration

  1. Download and install Claude Desktop

  1. Open Claude Desktop

  1. Click on Profile > Settings

  1. Click on Developer

  1. Within Local MCP Servers - click on Edit Config

  1. Open claude_desktop_config.json in a text editor, and add the following local MCP server. Make sure to add your AttackForge hostname for the "AF_HOSTNAME" and your AttackForge User API Key for the "AF_USER_KEY"

  1. Save the file. Quit/Close Claude Desktop. Re-open Claude Desktop and open your Settings and click on Developer. You should see af-mcp-server is now running.

  1. In Settings, click on Connectors and observe af-mcp-server is available. You can configure the integration and tools from here.

  1. Try the integration by going to a new chat. Click on Settings and enable the AttackForge connector, then enable the relevant tools you have access to. Try a prompt!

User Access to MCP

Once a user has connected their AI assistant to AttackForge, they can start to leverage the MCP Tools made available to them.

IMPORTANT: Each MCP Tool must be be enabled on a per-user basis by the AttackForge administrators for maximum security.

Access to Tools

  1. Go to Users > (Select the user) > Access > MCP

  1. View details for each Tool. Select the tools to enable for the user. Click Add

Once the tools have been enabled, the user is now able to access those tools in their AI assistant.

MCP Sessions

When a user has established a session with AttackForge MCP using their AI assistant, their sessions will become visible in Users > (Select the user) > Applications > MCP Sessions

Removing User Access to MCP

To remove a users' access to AttackForge MCP - apply each of the following steps.

Tools

Whoami

Description

This tool can be used to provide details regarding the currently authenticated AttackForge user.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool whoami and click Add

Example Prompts

Example Response

Count Assets

Description

Returns the number of AttackForge Assets matching the optional filter, scoped to the asset library indicated by asset_library_key. Use this when you only need a total - call find_assets for the records. Requires the Assets module to be enabled; otherwise returns an error.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool count_assets and click Add

Example Prompts

  • How many assets do I have?

  • How many assets did I create (my library)?

  • How many production assets are there?

  • How many uncatalogued assets exist?

Parameters

Parameter
Type
Required
Description

asset_library_key

string

No

Scope of asset libraries to count from. Built-in keys: "all" (every accessible library, also the default), "my" (assets created by the calling user), "uncatalogued" (assets not in any library). A 24-char hex string targets one specific custom library by its id. Do NOT filter on library membership via filter - use this parameter.

filter

object

No

A MongoDB-style filter. Supported fields are listed below.

Supported filter fields:

Field
Type / Values

id

ObjectId('<24 hex>')

created, modified

ISO-8601 datetime

name

string

asset_type

string

external_asset_id

string

custom_fields

array of { key: string, value: string or array }

Example Response

Count Projects

Description

This tool can be used to count Projects using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool count_projects and click Add

Example Prompts

Supported Query Fields

Example Response

Count Project Scope

Description

Returns the number of Project Scope items belonging to one AttackForge project. A Project Scope item represents one thing that is within the testing scope of that project (a URL, host, application, etc.). Use this when you only need a total - call find_project_scope to retrieve the items themselves. The caller must have at least View access to the project; if not, an access-denied error is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool count_project_scope and click Add

Example Prompts

  • How many scope items are in project X?

  • How many scope items in project X are linked to an asset?

  • How many in-scope URLs does the ACME project have?

Parameters

Parameter
Type
Required
Description

project_id

string

Yes

The id (24-hex) of the project whose scope you want to count. Obtain it from find_projects. The caller must have View access or higher.

filter

object

No

A MongoDB-style filter. Supported fields are listed below.

Supported filter fields:

Field
Type
Description

id

ObjectId('<24 hex>')

the Project Scope item id

name

string

the scope item name (URL, host, application, etc.)

asset_id

ObjectId('<24 hex>')

id of the linked Asset (only set when the Assets module is enabled and the scope item is linked to an Asset)

Example Response

Count Project Requests

Description

Returns the number of AttackForge project requests matching the optional filter. Use this when you only need a total - call find_project_requests for the records. Results are automatically scoped to project requests the calling user can access (non-admin users only count project requests they have View access to). Returns 0 when project requests are disabled for the tenant (frontend.enable_project_requests).

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool count_project_requests and click Add

Example Prompts

  • How many project requests are pending approval?

  • How many project requests require onsite testing?

  • How many project requests were submitted this quarter?

  • How many project requests have been rejected?

Parameters

Parameter
Type
Required
Description

filter

object

No

A MongoDB-style filter. Supported fields are listed below.

Supported filter fields:

Field
Type / Values

id

ObjectId('<24 hex>')

created, modified

ISO-8601 datetime

name, code

string

organization_code

string

status

one of 'Pending Approval', 'Approved', 'Rejected', 'Requested Information'

desired_start_date

ISO-8601 datetime

desired_end_date

ISO-8601 datetime

onsite_testing_required

one of 'Yes', 'No'

custom_fields

array of { key: string, value: string or array }

Example Response

Count Vulnerabilities

Description

This tool can be used to count Vulnerabilities using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool count_vulnerabilities and click Add

Example Prompts

Supported Query Fields

Example Response

Count Writeups

Description

This tool can be used to count Writeups using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool count_writeups and click Add

Example Prompts

Supported Query Fields

Example Response

Find Assets

Description

Lists AttackForge Assets matching the optional filter, scoped to one or more asset libraries. Use this when you need the actual asset records - call count_assets when only a total is needed. Requires the Assets module to be enabled; otherwise returns an error. Results are paginated (default 10 per page, max 50).

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_assets and click Add

Example Prompts

  • Show me all my assets. Include custom fields in the response.

  • Find assets with "router" in the name.

  • List all Infrastructure assets with their external asset IDs.

  • Show me the assets in a specific custom library.

  • Which assets are tagged production?

Parameters

Parameter
Type
Required
Description

asset_library_key

string

No

Scope of asset libraries to search ("all" default, "my", "uncatalogued", or a 24-char custom library id). Do NOT filter on library membership via filter - use this parameter.

filter

object

No

A MongoDB-style filter. Supported fields are listed below.

fields

array

No

System fields to include (id is always returned). Supported values are listed below.

custom_field_keys

array

No

Custom field keys to include (discover via get_field_structure(model="asset")).

limit

integer

No

Maximum records to return in this page. Default 10, max 50.

skip

integer

No

Number of records to skip (offset). Default 0.

Supported filter fields:

Field
Type / Values

id

ObjectId('<24 hex>')

created, modified

ISO-8601 datetime

name

string

asset_type

string

external_asset_id

string

custom_fields

array of { key: string, value: string or array }

Supported fields values:

Field
Type

id

string

name

string

created, modified

ISO-8601 datetime

asset_type

string

external_asset_id

string

details

string

Example Response

Find Projects

Description

This tool can be used to find Projects using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_projects and click Add

Example Prompts

Supported Query Fields

Example Response

Find Project Scope

Description

Lists Project Scope items belonging to one AttackForge project. A Project Scope item represents one thing within the testing scope of that project (a URL, host, application, etc.). Use this to retrieve the items themselves - call count_project_scope when only a total is needed. The caller must have at least View access to the project. The fields asset_id, asset_type, external_asset_id, and details are only populated when the Assets module is enabled (these come from the linked Asset). Results are paginated (default 10 per page, max 50).

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_project_scope and click Add

Example Prompts

  • Show me the scope for project X.

  • List the in-scope hosts for the ACME project with their details.

  • Which scope items in project X are linked to assets?

  • Find scope items containing "api" in project X.

Parameters

Parameter
Type
Required
Description

project_id

string

Yes

The id (24-hex) of the project whose scope you want to list. Obtain it from find_projects. The caller must have View access or higher.

filter

object

No

A MongoDB-style filter. Supported fields are listed below.

fields

array

No

System fields to include (id is always returned). Supported values are listed below.

custom_field_keys

array

No

Custom field keys to include. Project Scope items inherit the custom fields of the underlying Asset model (requires the Assets module). Discover keys via get_field_structure(model="asset").

limit

integer

No

Maximum records to return in this page. Default 10, max 50.

skip

integer

No

Number of records to skip (offset). Default 0.

Supported filter fields:

Field
Type
Description

id

ObjectId('<24 hex>')

the Project Scope item id

name

string

the scope item name (URL, host, application, etc.)

asset_id

ObjectId('<24 hex>')

id of the linked Asset (only set when the Assets module is enabled and the scope item is linked to an Asset)

asset_id, asset_type, external_asset_id, and details require the Assets module to be enabled - they are empty otherwise.

Supported fields values:

Field
Type

id

string

name

string

asset_id

string

asset_type

string

external_asset_id

string

details

string

Example Response

Find Project Requests

Description

Lists AttackForge project requests matching the optional filter. Use this when you need the actual records - call count_project_requests when only a total is needed. Results are automatically scoped to project requests the calling user can access (non-admin users only see project requests they have View access to). Returns an empty result set when project requests are disabled for the tenant (frontend.enable_project_requests). Results are paginated (default 10 per page, max 50).

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_project_requests and click Add

Example Prompts

  • Show me all project requests pending approval.

  • List project requests that require onsite testing, including the reason testing is required.

  • Find project requests with a desired start date after January 2026.

  • Show me the scope and desired testing window for project request X.

Parameters

Parameter
Type
Required
Description

filter

object

No

A MongoDB-style filter. Supported fields are listed below.

fields

array

No

System fields to include (id is always returned). Supported values are listed below.

custom_field_keys

array

No

Custom field keys to include (discover via get_field_structure(model="project-request")).

limit

integer

No

Maximum records to return in this page. Default 10, max 50.

skip

integer

No

Number of records to skip (offset). Default 0.

Supported filter fields:

Field
Type / Values

id

ObjectId('<24 hex>')

created, modified

ISO-8601 datetime

name, code

string

organization_code

string

status

one of 'Pending Approval', 'Approved', 'Rejected', 'Requested Information'

desired_start_date

ISO-8601 datetime

desired_end_date

ISO-8601 datetime

onsite_testing_required

one of 'Yes', 'No'

custom_fields

array of { key: string, value: string or array }

Supported fields values:

Field
Type

id

string

created, modified

ISO-8601 datetime

status

one of 'Pending Approval', 'Approved', 'Rejected', 'Requested Information'

name, code

string

organization_code

string

testsuite_ids

array of string

scope

string

reason_testing_is_required

string

desired_start_date

ISO-8601 datetime

desired_end_date

ISO-8601 datetime

desired_testing_window

string

onsite_testing_required

one of 'Yes', 'No'

linked_group_ids

array of string

Example Response

Find Vulnerabilities

Description

This tool can be used to find Vulnerabilities using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_vulnerabilities and click Add

Example Prompts

Supported Query Fields

Example Response

Find Affected Assets

Description

This tool can be used to find Affected Assets on Vulnerabilities using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_affected_assets and click Add

Example Prompts

Supported Query Fields

Example Response

Find Writeups

Description

This tool can be used to find Writeups using a provided filter expression.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool find_writeups and click Add

Example Prompts

Supported Query Fields

Example Response

Create Project

Description

Creates a new AttackForge project. This is a write operation: it allocates one project credit against the tenant licence and persists a new project record.

A two-step workflow is required because the input shape is tenant-specific - see Two-Step Workflow for Write Tools:

  1. Call get_args_schema_for_tool(tool="create_project") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

Common top-level groups are details, access, and notifications, but the authoritative list comes from the schema. Preconditions: the caller must have permission to create projects and the tenant must be within its project-creation licence limit. On success the new project id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool create_project and click Add

Example Prompts

  • Create a new project called "Q3 External Pentest" starting next Monday for two weeks.

  • Set up a project for the ACME web app engagement with reporting and retesting enabled.

  • Create a project and add my team to it.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The project-creation payload. Build it to satisfy get_args_schema_for_tool(tool="create_project").

Example Response

Create Project Request

Description

Creates a new AttackForge project request. This is a write operation: it persists a new project request record.

A two-step workflow is required because the input shape is tenant-specific - see Two-Step Workflow for Write Tools:

  1. Call get_args_schema_for_tool(tool="create_project_request") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

Preconditions: the caller must have permission to create project requests, and project requests must be enabled for the tenant (frontend.enable_project_requests). On success the new project request id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool create_project_request and click Add

Example Prompts

  • Submit a project request for an external pentest of the ACME web app in February.

  • Raise a project request requiring onsite testing for the data centre.

  • Create a project request for the ACME org with this scope and justification.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The project-request-creation payload. Build it to satisfy get_args_schema_for_tool(tool="create_project_request").

Example Response

Create Vulnerability

Description

Creates a new AttackForge vulnerability (also called a finding or issue) inside an existing project. Every vulnerability is linked to a project (project_id) and to a writeup template (writeup_id), which seeds its title/description/remediation.

A two-step workflow is required because the input shape is tenant-specific - see Two-Step Workflow for Write Tools:

  1. Call get_args_schema_for_tool(tool="create_vulnerability") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

Preconditions: the caller needs Edit access to the target project, View access to the chosen writeup, the project must be under its per-project vulnerability-creation limit, and (for non-Cloud/Server licences) Client-role users cannot create vulnerabilities. Any rich-text field must use the AttackForge richtext format from the richtext_format block. On success the new vulnerability id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool create_vulnerability and click Add

Example Prompts

  • Create a High SQL Injection finding in project X using the "SQL Injection" writeup.

  • Add a new vulnerability to project X based on writeup Y with these steps to reproduce.

  • Log a critical finding against the login asset in the ACME project.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The vulnerability-creation payload. Build it to satisfy get_args_schema_for_tool(tool="create_vulnerability"). At minimum requires a project_id (source: find_projects) and a writeup_id (source: find_writeups).

Example Response

Create Writeup

Description

Creates a new AttackForge writeup (also called a writeup template) which seeds the title/description/remediation of vulnerabilities created from it.

A two-step workflow is required because the input shape is tenant-specific - see Two-Step Workflow for Write Tools:

  1. Call get_args_schema_for_tool(tool="create_writeup") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

Any rich-text field must use the AttackForge richtext format from the richtext_format block. On success the new writeup id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool create_writeup and click Add

Example Prompts

  • Create a new writeup for "Insecure Direct Object Reference" with a remediation recommendation.

  • Add a writeup to the Main library describing weak TLS configuration.

  • Create a reusable writeup for CWE-89 SQL Injection with CVSS v3.1 scoring.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The writeup-creation payload. Build it to satisfy get_args_schema_for_tool(tool="create_writeup").

Example Response

Patch Project

Description

Partially updates an existing AttackForge project. This is a write operation: only the keys present in args are modified - keys you omit are left untouched. For array-valued fields (e.g. team membership, scoring systems, custom-field arrays) the schema documents whether the supplied array replaces or merges with the existing value.

A two-step workflow is required:

  1. Call get_args_schema_for_tool(tool="patch_project") to retrieve the current JSON Schema for args.

  2. Build args (always includes project_id plus the subset of fields you want to change) and call this tool.

Preconditions: the caller must have Edit access to the target project. On success the project id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool patch_project and click Add

Example Prompts

  • Change the status of project X to Completed.

  • Extend the end date of the ACME project to the end of the month.

  • Enable retesting on this project.

  • Update the Sub-Status custom field on project X to "On Hold - Awaiting Client".

Parameters

Parameter
Type
Required
Description

args

object

Yes

The project-patch payload. Build it to satisfy get_args_schema_for_tool(tool="patch_project"). Always includes project_id; every other key is optional and applies a partial update.

Example Response

Patch Project Scope

Description

Bulk adds, updates, or removes Project Scope items on a single AttackForge project. A Project Scope item represents one thing within the testing scope of a project (URL, host, application, etc.). One call can mix create/patch/delete operations across multiple scope items - the exact shape of those operations is defined in the args schema.

A two-step workflow is required because the input shape is tenant-specific - see Two-Step Workflow for Write Tools:

  1. Call get_args_schema_for_tool(tool="patch_project_scope") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

The schema always requires project_id (source: find_projects); it also describes how to target existing scope items (source: find_project_scope) for update/delete and how to declare new items for creation. Preconditions: the caller must have Edit access to the target project. On success the project id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool patch_project_scope and click Add

Example Prompts

  • Add these three URLs to the scope of project X.

  • Remove the out-of-scope host from project X.

  • Update the details on a scope item in project X.

  • Replace the scope of the ACME project with this list of assets.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The project-scope patch payload. Build it to satisfy get_args_schema_for_tool(tool="patch_project_scope"). Always requires project_id; describes create/patch/delete operations on scope items.

Example Response

Patch Project Request

Description

Partially updates an existing AttackForge project request. Only the keys present in args are modified - keys you omit are left untouched.

A two-step workflow is required:

  1. Call get_args_schema_for_tool(tool="patch_project_request") to retrieve the current JSON Schema for args.

  2. Build args (always includes project_request_id plus the subset of fields to change) and call this tool.

Preconditions: the caller must have Edit access to the target project request, and project requests must be enabled for the tenant (frontend.enable_project_requests). On success the project request id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool patch_project_request and click Add

Example Prompts

  • Approve project request X.

  • Change the desired start date on project request X to next month.

  • Mark project request X as Requested Information and add a note.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The project-request-patch payload. Build it to satisfy get_args_schema_for_tool(tool="patch_project_request"). Always includes project_request_id; every other key is optional and applies a partial update.

Example Response

Patch Vulnerability

Description

Patches an existing AttackForge vulnerability (also called a finding or issue) inside a project. Only the fields supplied in args are changed; omitted fields are left untouched.

A two-step workflow is required:

  1. Call get_args_schema_for_tool(tool="patch_vulnerability") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

The schema requires at minimum a vulnerability id (source: find_vulnerabilities) and a project id (source: find_projects, or the project_ids on the vulnerability returned by find_vulnerabilities). Preconditions: the caller needs Edit access to the target project. Any rich-text field must use the AttackForge richtext format from the richtext_format block. On success the patched vulnerability id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool patch_vulnerability and click Add

Example Prompts

  • Change the priority of vulnerability X to Critical.

  • Mark vulnerability X as closed.

  • Update the steps to reproduce on this finding.

  • Set the CVE custom field on vulnerability X to CVE-2025-26943.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The vulnerability-patch payload. Build it to satisfy get_args_schema_for_tool(tool="patch_vulnerability"). Requires at minimum a vulnerability id and a project id; other keys apply a partial update.

Example Response

Patch Writeup

Description

Patches an existing AttackForge writeup (also called a writeup template). Only the fields supplied in args are changed; omitted fields are left untouched.

A two-step workflow is required:

  1. Call get_args_schema_for_tool(tool="patch_writeup") to retrieve the current JSON Schema for args.

  2. Build args to match that schema and call this tool.

The schema requires at minimum a writeup id (source: find_writeups). Preconditions: the caller needs Edit access to the writeup (and to the target library when moving it). Any rich-text field must use the AttackForge richtext format from the richtext_format block. On success the patched writeup id is returned.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool patch_writeup and click Add

Example Prompts

  • Update the remediation recommendation on the XSS writeup.

  • Change the severity of writeup X to 8.

  • Move this writeup into the Main library.

  • Add the "OWASP Top 10" tag to writeup X.

Parameters

Parameter
Type
Required
Description

args

object

Yes

The writeup-patch payload. Build it to satisfy get_args_schema_for_tool(tool="patch_writeup"). Requires at minimum a writeup id; other keys apply a partial update.

Example Response

Get Field Structure

Description

This tool can be used to get the topological structure of all system and custom fields that make up the AttackForge data model. This is useful to determine the custom field keys that exist on the data model.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool get_field_structure and click Add

Example Prompts

Show me what fields are available on vulnerabilities.

Supported Query Fields

Example Response

Get File

Description

This tool can be used to get the metadata and binary content of an AttackForge File by supplying its id. This is useful for retrieving evidence files attached to vulnerabilities or files attached to writeups.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool get_file and click Add

Example Prompts

Prompt 1

Get all the AttackForge vulnerabilities for project "ACME Corp. Web App Pentest". For every vulnerability, do the following:

  • show me all of the evidence files on the vulnerability. For every evidence file, do the following:

    • show file name, file type and file size.

    • retrieve and display the file if it is an image

Prompt 2

Download the evidence file with ID 699ff11c529fc71046260673. Show me the metadata for the file attached to this vulnerability. What is the file name and size of evidence file ID 699ff11c529fc71046260673? Get the hash and mime type for a specific file. Retrieve the evidence image from this vulnerability. Show me when this evidence file was last modified.

Supported Query Fields

Supported Response Fields

Example Response

Get Args Schema For Tool

Description

Returns the JSON Schema that validates the args property of a dynamic-shape mutation tool. The shape of args for the create_* / patch_* tools is configured per tenant (custom fields, optional features, role-based access overrides) and cannot be hard-coded - you MUST call this tool first, then build args to match the returned schema before invoking the target tool.

The returned schema is the same one the server uses for validation, so any payload that satisfies it will pass server-side validation. Where the schema includes rich-text fields, a richtext_format block is returned describing the required AttackForge richtext format. Tenant config can change between sessions; do not cache results across conversations.

See Two-Step Workflow for Write Tools on the Working with the Tools page.

How To Enable

  1. Go to Users

  2. Select the user you would like to provide access to this tool

  3. Click on Access > MCP

  4. Click on Add Tools

  5. Select the tool get_args_schema_for_tool and click Add

Example Prompts

  • What fields do I need to create a vulnerability?

  • Show me the schema for creating a project.

  • What does the payload for patching a writeup look like?

  • Which fields are required to create a project request?

Parameters

Parameter
Type
Required
Description

tool

string

Yes

The dynamic-shape mutation tool whose args schema you need. One of create_project, create_project_request, create_vulnerability, create_writeup, patch_project, patch_project_request, patch_project_scope, patch_vulnerability, patch_writeup. Read-only tools have static schemas and are not valid here.

Example Response

Working With Tools

The AttackForge MCP tools fall into three groups:

  • Read tools - whoami, find_*, count_*, get_file, get_field_structure, get_args_schema_for_tool. These never modify data.

  • Write tools - create_* and patch_*. These create or partially update records.

  • Schema/discovery tools - get_field_structure and get_args_schema_for_tool, used to discover the tenant-specific shape of your data model before reading custom fields or building write payloads.

The following concepts are shared across many tools and are described once here rather than repeated on every tool.

Filter Syntax

find_* and count_* tools accept an optional filter parameter expressed as a MongoDB-style find() filter.

Supported operators

$regex accepts either form (prefer the second)

Quoting rules - string values use single or double quotes, but operators and field names MUST be unquoted

Examples

The fields you may reference inside filter are listed under each tool's Parameters section.

Some scoping concerns must NOT be expressed inside filter and have dedicated parameters instead - for example project_ids and visibility on vulnerabilities, writeup_library_keys on writeups, and asset_library_key on assets. See the relevant tool.

Selecting Fields and Custom Fields

find_* tools return only the id of each record by default. To return more:

  • fields - an array of system field names to include. The allowed values are enumerated per tool (see each tool's Parameters).

  • custom_field_keys - an array of custom field keys to include in each record's custom_fields array. Discover the available keys for a model with get_field_structure.

This replaces the older behaviour where custom fields were returned implicitly. You now request exactly the fields you need.

Pagination

find_* tools are paginated:

  • limit - maximum records to return in this page. Defaults to 10, capped at 50.

  • skip - number of records to skip (offset). Defaults to 0.

Each response includes count (records in this page) and total (records matching overall). When count equals limit and skip + count < total, there are more pages - call again with skip advanced by limit. Use the count_* tools when you only need a total and not the records themselves.

Two-Step Workflow for Write Tools

The create_* and patch_* tools take a single args object whose shape is configured per tenant (custom fields, optional features, role-based access) and therefore cannot be hard-coded. Always use the two-step workflow:

  1. Call get_args_schema_for_tool with the target tool name to retrieve the current JSON Schema for args.

  2. Build an args object that satisfies that schema, then call the target create_* / patch_* tool.

The returned schema is the same one the server uses for validation, so any payload that satisfies it will pass. Tenant configuration can change between sessions, so do not cache the schema across conversations.

Any rich-text field referenced in the schema must use the AttackForge richtext format described in the richtext_format block returned alongside the schema by get_args_schema_for_tool.

patch_* tools apply a partial update: only the keys you supply in args are changed; omitted keys are left untouched.

Prompt Examples

Interactive Attack Chain Explorer

The Attack Chain Explorer generates an interactive web page from real AttackForge testing data — turning a project's findings into an animated, explorable kill-chain report. Pick from various distinct attack chains — different routes an attacker could realistically take through the engagement. Watch each chain animate stage-by-stage: attacker → recon → actionable stages → outcome. Hit Best fix to see the single highest-leverage remediation, or Break chain to see where any one fix collapses the path.

Tools Required

Skill MD

MITRE ATT&CK Attack Chain - Style 1

The MITRE ATT&CK option will frame the project's findings against MITRE's tactics — Reconnaissance, Initial Access, Execution, Persistence, etc. It's built to land the attack chain narrative, the remediation plan, and the priority call - all on one page, so it suits board / leadership / engineering briefings.

Style 1 — Executive landscape, one-pager

Tools Required

Skill MD

MITRE ATT&CK Attack Chain - Style 2

The MITRE ATT&CK option will frame the project's findings against MITRE's tactics — Reconnaissance, Initial Access, Execution, Persistence, etc. It's built to land the attack chain narrative, the remediation plan, and the priority call - all on one page, so it suits board / leadership / engineering briefings.

Style 2 — Portrait narrative, debrief leave-behind

Tools Required

Skill MD

Cyber Kill Chain

The Cyber Kill Chain option maps every finding in an AttackForge project onto the seven stages of the Lockheed Martin Cyber Kill Chain — but with modernized offensive-security labels: Reconnaissance, Payload Development, Initial Access, Exploitation, Persistence, Command & Control, Mission Impact.

Tools Required

Skill MD

Generate Pentest Executive Summary

Tools Required

Prompt

Generate Vulnerability Descriptions and Recommendations

Tools Required

Prompt

Determine Single Highest-Risk Vulnerability on Project

Tools Required

Prompt

Show Vulnerabilities Assigned to Me

Tools Required

Prompt

Create a Vulnerability Composition Metrics Dashboard

Tools Required

Prompt

Top 10 Vulnerabilities Report

Tools Required

Prompt

Top 10 Vulnerabilities Dashboard

Tools Required

Prompt

Create Interactive Vulnerabilities Chart

Tools Required

Prompt

Review of Vulnerabilities in Retest

Tools Required

Prompt

Top 10 Affected Assets Dashboard

Tools Required

Prompt

CVSS Dashboard

Tools Required

Prompt

Unique OWASP Top 10 Vulnerabilities Report

Tools Required

Prompt

Interactive Executive Project Closeout Scorecard

Tools Required

Prompt

Last updated