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
Log in to Microsoft Copilot Studio. Select
Agents > Create blank agent

Click on
Tools > Add a tool

Click on
Model Context Protocol > New tool

Click on
Model Context Protocol

Enter in a name for your connecter. For the
Server URLthis should be in the following format:https://{{ATTACKFORGE-HOSTNAME}}/mcp. SelectOAuth 2.0for Authentication. SelectDynamic discoveryfor Type. ClickAdd.

Click on
Create new connection

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 onAgree and Continue. You will then be redirected back to Copilot Studio.


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

Your agent should now be connected to AttackForge.

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

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 clickConnect. Otherwise your prompt should work!



ChatGPT Self Registration
Log in to ChatGPT and from the menu - select
Workspace settings

Select
Apps & Connectors

Click on
Create

Enter in a name for your connecter. For the
MCP Server URLthis should be in the following format:https://{{ATTACKFORGE-HOSTNAME}}/mcp. ClickCreate.

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.

Click
Publish

Review and actions then click
Publish

AttackForge MCP will now be available.

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

Claude Self Registration
Log in to Claude and from the menu - select
Settings

Select
Connectors

Select
Add custom connector

Enter in a name for your connecter. For the
MCP Server URLthis should be in the following format:https://{{ATTACKFORGE-HOSTNAME}}/mcp. ClickAdd.

Click
Connect

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.

Try the integration by going to a new chat. Click on
Settingsand 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:
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.
AttackForge user supplies the Client Id and Client Secret to their AI assistant to configure the integration.
Manually Registering MCP Clients
Go to
Users > (Select the user) > Applications > MCP Client

Click on
Add Client. Include a name for the client and insert the redirect URLs. ClickAdd
TIP: Click on the down arrow to see common redirect URLs for popular remote MCP clients

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
Log in to ChatGPT and from the menu - select
Workspace settings

Select
Apps & Connectors

Click on
Create

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

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.

Click
Publish

Review and actions then click
Publish

AttackForge MCP will now be available.

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

Manually Enrolling Claude
Log in to Claude and from the menu - select
Settings

Select
Connectors

Select
Add custom connector

Enter in a name for your connecter. For the
MCP Server URLthis should be in the following format:https://{{ATTACKFORGE-HOSTNAME}}/mcp. ClickAdvanced Settings. Enter in the OAuth 2 Client Id and Client Secret. ClickAdd.

Click
Connect

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.

Try the integration by going to a new chat. Click on
Settingsand 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
Download and install LM Studio

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

Open
mcp.jsontab. 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".

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

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
Download and install Claude Desktop

Open Claude Desktop

Click on
Profile > Settings

Click on
Developer

Within Local MCP Servers - click on
Edit Config

Open
claude_desktop_config.jsonin 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"
Save the file. Quit/Close Claude Desktop. Re-open Claude Desktop and open your Settings and click on
Developer. You should seeaf-mcp-serveris now running.

In Settings, click on
Connectorsand observeaf-mcp-serveris available. You can configure the integration and tools from here.

Try the integration by going to a new chat. Click on
Settingsand 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
Go to
Users > (Select the user) > Access > MCP

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.
Remove access to tools
Revoke MCP sessions
Remove MCP clients
Tools
Whoami
Description
This tool can be used to provide details regarding the currently authenticated AttackForge user.
How To Enable
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
whoamiand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
count_assetsand clickAdd
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
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:
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
count_projectsand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
count_project_scopeand clickAdd
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
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:
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
count_project_requestsand clickAdd
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
filter
object
No
A MongoDB-style filter. Supported fields are listed below.
Supported filter fields:
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
count_vulnerabilitiesand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
count_writeupsand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_assetsand clickAdd
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
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:
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:
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_projectsand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_project_scopeand clickAdd
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
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:
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, anddetailsrequire the Assets module to be enabled - they are empty otherwise.
Supported fields values:
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_project_requestsand clickAdd
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
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:
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:
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_vulnerabilitiesand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_affected_assetsand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
find_writeupsand clickAdd
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:
Call
get_args_schema_for_tool(tool="create_project")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
create_projectand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="create_project_request")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
create_project_requestand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="create_vulnerability")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
create_vulnerabilityand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="create_writeup")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
create_writeupand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="patch_project")to retrieve the current JSON Schema forargs.Build
args(always includesproject_idplus 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
patch_projectand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="patch_project_scope")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
patch_project_scopeand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="patch_project_request")to retrieve the current JSON Schema forargs.Build
args(always includesproject_request_idplus 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
patch_project_requestand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="patch_vulnerability")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
patch_vulnerabilityand clickAdd
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
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:
Call
get_args_schema_for_tool(tool="patch_writeup")to retrieve the current JSON Schema forargs.Build
argsto 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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
patch_writeupand clickAdd
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
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
get_field_structureand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
get_fileand clickAdd
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
Go to
UsersSelect the user you would like to provide access to this tool
Click on
Access > MCPClick on
Add ToolsSelect the tool
get_args_schema_for_tooland clickAdd
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
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_*andpatch_*. These create or partially update records.Schema/discovery tools -
get_field_structureandget_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
filterand have dedicated parameters instead - for exampleproject_idsandvisibilityon vulnerabilities,writeup_library_keyson writeups, andasset_library_keyon 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'scustom_fieldsarray. Discover the available keys for a model withget_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 to10, capped at50.skip- number of records to skip (offset). Defaults to0.
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:
Call
get_args_schema_for_toolwith the target tool name to retrieve the current JSON Schema forargs.Build an
argsobject that satisfies that schema, then call the targetcreate_*/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