> For the complete documentation index, see llms.txt.
Skip to main content

Check out Port for yourself ➜ 

Visualize and manage your ServiceNow incidents

Implement with AI

Send this guide to your coding agent.

Prerequisite: Install Port MCP

Open plan mode. Implement this Port guide in my org via MCP:

https://docs.port.io/guides/all/visualize-and-manage-servicenow-incidents

Goal: get the guide's core flow working end-to-end in my org; adapting it to fit my existing setup takes priority over matching the guide 1:1.

Plan:
1. Confirm MCP is connected, in the right org, with sufficient permissions.
2. Diff the guide's data model (blueprints, properties, relations, actions, agents, automations, integrations, secrets) against mine.
3. Propose adaptations for gaps, reusing existing blueprints/relations over guide-named duplicates.
4. Flag what needs a UI click, credential, or secret from me, testing MCP capability empirically before ruling anything out.
5. Stop on any blocker and give me options. Approving this plan authorizes the writes it lists; pause only for writes beyond what's listed.

Build:
- Extend blueprint schema additively when upserting; don't remove or overwrite existing properties, and treat type conflicts as a blocker, not an auto-fix.
- List any mock data in the plan, minimal and labeled mock; once approved, seed it without re-asking, and tell me what you seeded.
- For anything the guide writes downstream (e.g. a webhook target), use a real entity, not a mock.
- For pages/widgets, use the real page identifier from the app URL, not a guessed slug.
- When you hit a UI step confirmed (not assumed) unsupported via MCP, pause, give exact clicks, then resume via MCP.
- Validate and give links after each meaningful step (only a tool-returned URL, no guessed paths); don't proceed if the last run wasn't a success.

Done:
- Confirm the guide's expected output exists and runs in Port.
- Summarize adaptations, seeded data, what was mocked or skipped, remaining UI steps, and how to verify.

This guide demonstrates how to bring your ServiceNow incident management experience into Port. You will learn how to:

  • Ingest ServiceNow incident data into Port's context lake using Port's ServiceNow integration.
  • Set up self-service actions to manage incidents (create, resolve, and delete).
  • Build dashboards in Port to monitor and act on incidents.
ServiceNow Incident Manager dashboard overview All ServiceNow incidents table with actions

Common use cases

  • Monitor the status and health of all ServiceNow incidents from a centralized dashboard.
  • Empower platform teams to automate day-2 operations via Webhooks.

Prerequisites

This guide assumes the following:

Set up self-service actions

We will create self-service actions in Port to directly interact with the ServiceNow Table API. These actions let users:

  1. Create a new incident.

  2. Resolve an existing incident.

  3. Delete an incident.

Each action will be configured via JSON and triggered using synced webhooks secured with secrets. To implement these use-cases, follow the steps below:

Add Port secrets

To add a secret to Port:

  1. In your Port application, click on your profile picture .

  2. Click on Credentials.

  3. Click on the Secrets tab.

  4. Click on + Secret and add the following secret:

    • SERVICENOW_API_TOKEN: A base64 encoded string of your ServiceNow credentials generated as:

      echo -n "your-instance-username:your-instance-password" | base64

Create a new incident

  1. Go to the Self-service page in Port.

  2. Click on the + New Action button.

  3. Click on the {...} Edit JSON button.

  4. Copy and paste the following JSON configuration into the editor.

    Create incident action (Click to expand)
    Replace placeholder

    Remember to replace the <SERVICENOW_INSTANCE_URL> placeholder with you actual ServiceNow instance such as https://example-id.service-now.com

    {
    "identifier": "create_snow_incident",
    "title": "Create Incident",
    "icon": "Servicenow",
    "description": "Create an incident in ServiceNow using webhook",
    "trigger": {
    "type": "self-service",
    "operation": "CREATE",
    "userInputs": {
    "properties": {
    "short_description": {
    "icon": "DefaultProperty",
    "title": "Short Description",
    "description": "Description of the incident",
    "type": "string"
    },
    "assigned_to": {
    "icon": "DefaultProperty",
    "title": "Assigned To",
    "description": "User this incident is assigned to",
    "type": "string"
    },
    "urgency": {
    "title": "Urgency",
    "icon": "DefaultProperty",
    "type": "string",
    "default": "2",
    "enum": [
    "1",
    "2",
    "3"
    ],
    "enumColors": {
    "1": "red",
    "2": "yellow",
    "3": "green"
    }
    },
    "sysparm_display_value": {
    "title": "Sysparm Display Value",
    "description": "Determines the type of data returned",
    "icon": "DefaultProperty",
    "type": "string",
    "default": "all",
    "enum": [
    "true",
    "false",
    "all"
    ]
    },
    "sysparm_input_display_value": {
    "title": "Sysparm Input Display Value",
    "description": "Flag that indicates whether to set field values using the display value or the actual value",
    "type": "boolean",
    "default": false
    }
    },
    "required": [
    "short_description",
    "assigned_to"
    ],
    "order": [
    "short_description",
    "assigned_to",
    "urgency",
    "sysparm_display_value",
    "sysparm_input_display_value"
    ]
    },
    "blueprintIdentifier": "servicenowIncident"
    },
    "invocationMethod": {
    "type": "WEBHOOK",
    "url": "<SERVICENOW_INSTANCE_URL>/api/now/table/incident",
    "agent": false,
    "synchronized": true,
    "method": "POST",
    "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"
    },
    "body": {
    "short_description": "{{.inputs.short_description}}",
    "assigned_to": "{{.inputs.assigned_to}}",
    "urgency": "{{.inputs.urgency}}",
    "sysparm_display_value": "{{.inputs.sysparm_display_value}}",
    "sysparm_input_display_value": "{{.inputs.sysparm_input_display_value}}"
    }
    },
    "requiredApproval": false
    }
  5. Click Save.

Now you should see the Create Incident action in the self-service page. 🎉

Resolve an incident

  1. Go to the Self-service page in Port.

  2. Click on the + New Action button.

  3. Click on the {...} Edit JSON button.

  4. Copy and paste the following JSON configuration into the editor.

    Resolve incident action (Click to expand)
    Replace placeholder

    Remember to replace the <SERVICENOW_INSTANCE_URL> placeholder with you actual ServiceNow instance such as https://example-id.service-now.com

    {
    "identifier": "resolve_snow_incident",
    "title": "Resolve Incident",
    "icon": "Servicenow",
    "description": "Resolve an incident in the ServiceNow catalog",
    "trigger": {
    "type": "self-service",
    "operation": "DAY-2",
    "userInputs": {
    "properties": {
    "resolution_code": {
    "type": "string",
    "title": "Resolution Code",
    "default": "Solution provided",
    "enum": [
    "Duplicate",
    "Known error",
    "No resolution provided",
    "Resolved by caller",
    "Resolved by change",
    "Resolved by problem",
    "Resolved by request",
    "Solution provided",
    "Workaround provided",
    "User error"
    ],
    "enumColors": {
    "Duplicate": "lightGray",
    "Known error": "lightGray",
    "No resolution provided": "lightGray",
    "Resolved by caller": "lightGray",
    "Resolved by change": "lightGray",
    "Resolved by problem": "lightGray",
    "Resolved by request": "lightGray",
    "Solution provided": "lightGray",
    "Workaround provided": "lightGray",
    "User error": "lightGray"
    }
    },
    "resolution_note": {
    "type": "string",
    "title": "Resolution Note"
    }
    },
    "required": [
    "resolution_code",
    "resolution_note"
    ],
    "order": [
    "resolution_code",
    "resolution_note"
    ]
    },
    "blueprintIdentifier": "servicenowIncident"
    },
    "invocationMethod": {
    "type": "WEBHOOK",
    "url": "<SERVICENOW_INSTANCE_URL>/api/now/table/incident/{{.entity.identifier}}",
    "agent": false,
    "synchronized": true,
    "method": "PATCH",
    "headers": {
    "RUN_ID": "{{ .run.id }}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"
    },
    "body": {
    "state": "6",
    "close_code": "{{ .inputs.resolution_code }}",
    "close_notes": "{{ .inputs.resolution_note }}"
    }
    },
    "requiredApproval": false
    }
  5. Click Save.

Now you should see the Resolve Incident action in the self-service page. 🎉

Delete an incident

  1. Go to the Self-service page in Port.

  2. Click on the + New Action button.

  3. Click on the {...} Edit JSON button.

  4. Copy and paste the following JSON configuration into the editor.

    Delete incident action (Click to expand)
    Replace placeholder

    Remember to replace the <SERVICENOW_INSTANCE_URL> placeholder with you actual ServiceNow instance such as https://example-id.service-now.com

    {
    "identifier": "delete_snow_incident",
    "title": "Delete Incident",
    "icon": "Servicenow",
    "description": "Deletes an incident from the ServiceNow incident catalog",
    "trigger": {
    "type": "self-service",
    "operation": "DELETE",
    "userInputs": {
    "properties": {},
    "required": [],
    "order": []
    },
    "blueprintIdentifier": "servicenowIncident"
    },
    "invocationMethod": {
    "type": "WEBHOOK",
    "url": "<SERVICENOW_INSTANCE_URL>/api/now/table/incident/{{.entity.identifier}}",
    "agent": false,
    "synchronized": true,
    "method": "DELETE",
    "headers": {
    "RUN_ID": "{{ .run.id }}",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Basic {{.secrets.SERVICENOW_API_TOKEN}}"
    },
    "body": {}
    },
    "requiredApproval": false
    }
  5. Click Save.

Now you should see the Delete Incident action in the self-service page. 🎉

Visualize metrics

With incidents ingested and actions configured, the next step is building a dashboard to monitor ServiceNow data directly in Port. We can visualize all incidents by state, priority, or severity using customizable widgets. In addition, we can trigger remediation workflows right from your dashboard.

Create a dashboard

  1. Navigate to your context lake.
  2. Click on the + button in the left sidebar.
  3. Select New dashboard.
  4. Name the dashboard ServiceNow Incident Management.
  5. Input Create, view and manage your incidents under Description.
  6. Select the Servicenow icon.
  7. Click Create.

We now have a blank dashboard where we can start adding widgets to visualize insights from our ServiceNow incidents.

Add widgets

In the new dashboard, create the following widgets:

Total incidents created in the last 3 months (click to expand)
  1. Click + Widget and select Number Chart.

  2. Title: Total incidents (add the Servicenow icon).

  3. Select Count entities Chart type and choose ServiceNow Incident as the Blueprint.

  4. Select count for the Function.

  5. Add this JSON to the Additional filters editor to filter incidents created in the last 3 months:

    [
    {
    "combinator":"and",
    "rules":[
    {
    "property":"createdOn",
    "operator":"between",
    "value":{
    "preset":"last3Months"
    }
    }
    ]
    }
    ]
  6. Select custom as the Unit and input incidents as the Custom unit

    Number chart counting total ServiceNow incidents
  7. Click Save.

Incident by state (click to expand)
  1. Click + Widget and select Pie chart.

  2. Title: Incident by state (add the Servicenow icon).

  3. Choose the ServiceNow Incident blueprint.

  4. Under Breakdown by property, select the State property

    Pie chart for ServiceNow incidents by state
  5. Click Save.

Incident by severity (click to expand)
  1. Click + Widget and select Pie chart.

  2. Title: Incident by severity (add the Servicenow icon).

  3. Choose the ServiceNow Incident blueprint.

  4. Under Breakdown by property, select the Severity property

    Pie chart for ServiceNow incidents by severity
  5. Click Save.

Create incident action (click to expand)
  1. Click + Widget and select Action card.

  2. Choose the Create Incident action we created in this guide

    Action card with Create Incident action selected
  3. Click Save.

All Servicenow incidents view (click to expand)
  1. Click + Widget and select Table.

  2. Title the widget All Incidents.

  3. Choose the ServiceNow Incident blueprint

    Table widget configured for all ServiceNow incidents
  4. Click Save to add the widget to the dashboard.

  5. Click on the ... button in the top right corner of the table and select Customize table.

  6. In the top right corner of the table, click on Manage Properties and add the following properties:

    • State: The current state of the incident.
    • Assigned To: The assignee of the incident.
    • Priority: The incident priority.
    • Entity Creation Date: The date the incident was created in Port.
  7. Click on the save icon in the top right corner of the widget to save the customized table.