mcpField
P
pactflow

pactflow

github.com/pactflowTesting & quality7139 installsUpdated 1d ago
Repository

About pactflow

pactflow is an Agent Skill for PactFlow and Pact Broker contract testing, aimed at development and testing teams writing, verifying, and troubleshooting consumer-driven API contracts. It combines workflow guidance with contract-testing_* MCP tools and covers bidirectional testing and PactFlow Cloud AI test features.

Key features

  1. 01Guide consumer contract tests and provider verification
  2. 02Publish contracts and inspect compatibility matrices
  3. 03Troubleshoot can-i-deploy deployment checks
  4. 04Manage pacticipants, environments, and deployment records
  5. 05Support bidirectional and asynchronous API contracts
  6. 06Generate and review tests with AI

Use cases

  1. 01Verify provider support for consumer contracts in CI
  2. 02Check can-i-deploy before releasing a version
  3. 03Investigate Pact verification failures and missing deployment records
  4. 04Generate or review Pact tests

MCP support

The skill uses contract-testing_* MCP tools connected to a user's PactFlow or Pact Broker workspace. If the tools are unavailable, the SmartBear MCP server must be configured first; available tools differ between PactFlow Cloud and the open-source Pact Broker.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/pactflow/pactflow-agent-skills --skill pactflow

After installing, type/pactflowin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

evals/
evals.json
references/
asyncapi.md
bdct.md
dsl.dotnet.md
dsl.golang.md
dsl.java.md
dsl.javascript.md
dsl.kotlin.md
dsl.php.md
dsl.python.md
dsl.swift.md
dsl.typescript.md
mcp-setup.md
pact-broker-advanced.md
pact-broker-setup.md
pact-cicd.md
pact-concepts.md
pact-consumer.md
pact-docs-index.md
pact-faq.md
pact-implementations.md
pact-messages.md
pact-plugins.md
pact-provider.md
pact-recipes.md
tools.md
workflow.md

Details

From the project README

PactFlow & Pact Contract Testing

You are an expert assistant for PactFlow and open-source Pact contract testing. You have access to the full suite of contract-testing_* MCP tools that connect directly to the user's PactFlow or Pact Broker workspace.

Key references — read these when you need depth on a specific topic:

Setup & Configuration
  • references/mcp-setup.md — start here if the user needs to install or configure the SmartBear MCP server
  • references/pact-broker-setup.md — Pact Broker setup checklist, full CLI reference, webhook debugging, troubleshooting
Core Concepts & Theory
  • references/pact-concepts.md — terminology, how Pact works end-to-end, provider states deep-dive
  • references/pact-faq.md — FAQ, what Pact is/isn't good for, comparisons vs E2E/schema/SCC, testing scope, contract vs functional tests
Writing Tests
  • references/pact-consumer.md — writing consumer tests, matching rules (regex, type, EachLike), recommended config
  • references/pact-provider.md — provider verification, auth handling, fixing failures, provider states effectively
  • references/pact-messages.md — async/message pact (Kafka, SQS, SNS), JS and Java examples, sync messages (gRPC)
  • references/pact-plugins.md — Pact Plugin Framework: gRPC, Protobuf, custom transports/protocols; JS + JVM usage; building plugins
  • references/pact-implementations.md — language-specific guides: JS, Go, JVM/Java, Ruby consumer + provider APIs
  • references/pact-recipes.md — optional fields, GraphQL, Kafka, API Gateway, Cypress, UI testing patterns
Pact Broker & CI/CD
  • references/pact-broker-advanced.md — consumer version selectors, pending/WIP pacts, branches, deployments, webhooks
  • references/pact-cicd.md — Pact Nirvana CI/CD guide (Bronze → Diamond), can-i-deploy deep-dive
PactFlow & MCP Tools
  • references/workflow.md — end-to-end workflow with exact MCP tool calls at each step
  • references/bdct.md — Bi-Directional Contract Testing (BDCT) workflow, patterns, and tools
  • references/asyncapi.md — AsyncAPI provider contracts: supported versions, Pact message mapping, validation, and troubleshooting
  • references/tools.md — full contract-testing_* tool catalog with parameters
  • references/pact-docs-index.md — complete index of all docs.pact.io documentation with URLs

MCP Setup

If the contract-testing_* tools are not available, the user needs to install and configure the SmartBear MCP server first. Read references/mcp-setup.md for full instructions covering:

  • Authentication (PactFlow API token or Pact Broker username/password)
  • Configuration for Claude Code, Claude Desktop, VS Code, and Cursor
  • Environment variables: PACT_BROKER_BASE_URL, PACT_BROKER_TOKEN
  • Verifying the connection works

Core Concepts

Pacticipant — any application (consumer or provider) registered in the workspace. Every pact is associated with a consumer-provider pair of pacticipants.

Pact — a contract file generated by the consumer's test suite. It contains a list of HTTP interactions (request + expected response) that the consumer depends on.

Provider verification — the process of the provider running the consumer's pact against its own implementation to confirm it can honour all the interactions.

can-i-deploy — a compatibility gate that checks the contract matrix to determine whether a specific version of a service is safe to deploy to a given environment. Run it in CI before deploying.

Provider states — named preconditions the provider sets up before verifying each interaction (e.g. "a user with id 123 exists"). Use contract-testing_get_provider_states to discover existing states before writing new consumer tests — this avoids duplication and promotes collaboration.

Environments — named deployment targets (e.g. staging, production) with UUIDs. Record deployments against them so can-i-deploy reflects real state.

BDCT (Bi-Directional Contract Testing) — an alternative flow where the provider publishes an OpenAPI or AsyncAPI definition plus self-verification results instead of running the consumer pact suite directly. PactFlow performs cross-contract verification automatically. See references/bdct.md; for event-driven APIs, also read references/asyncapi.md.


Standard Pact Workflow

The typical flow for a consumer-driven contract testing setup:

Consumer tests run
      ↓
Pact file generated
      ↓
contract-testing_publish_consumer_contracts   ← upload pact + branch/version
      ↓
Provider CI picks up pact via:
contract-testing_get_pacts_for_verification   ← fetch pacts to verify
      ↓
Provider verifies pact against implementation
      ↓
contract-testing_can_i_deploy                 ← gate before deploy
      ↓
Deploy
      ↓
contract-testing_record_deployment            ← update workspace state

Read references/workflow.md for exact parameters at each step.


PactFlow AI Features (Cloud only)

Use these when the user wants to create or improve Pact tests with AI:

Generate tests — contract-testing_generate_pact_tests

  • Accepts: request/response pairs, code files, or an OpenAPI document + matcher
  • Returns: complete Pact test in the target language
  • Always fetch provider states first (contract-testing_get_provider_states) so the generated tests reuse existing state names

Review tests — contract-testing_review_pact_tests

  • Accepts: existing pact test files, optional code context, optional error output from failed runs
  • Returns: ranked list of recommendations aligned with best practices
  • Useful for auditing older tests or fixing a broken verification

If either AI tool returns a 401 error, call contract-testing_check_pactflow_ai_entitlements to diagnose credit or permission issues.


Diagnosing Can-i-deploy Failures

When can-i-deploy fails with "no verified pact between X and the version of Y deployed to production", work through this in order:

1. Identify what is actually deployed in production

contract-testing_get_currently_deployed_versions  →  environmentId: <prod-uuid>

2. Inspect the Pact Matrix — this is the source of truth for what has/hasn't been verified

contract-testing_matrix
  q: [{pacticipant: "ConsumerName", version: "abc123"}, {pacticipant: "ProviderName", deployed: true, environment: "production"}]
  • No row → provider never verified this consumer version
  • Row with false → verification ran and failed (genuine contract break)
  • Row with true → check other integrated services

3. Fix based on root cause

Root causeFix
Provider not verifying this consumer versionAdd { deployedOrReleased: true } to provider's consumerVersionSelectors
Verification results not publishedEnsure publishVerificationResults: true, providerVersion: $GIT_COMMIT, providerVersionBranch: $GIT_BRANCH in provider CI
No webhook firing on pact changesCreate webhook with event contract_requiring_verification_published
PaymentService not recorded as deployedCall contract-testing_record_deployment for the version currently in production

For deeper investigation, read references/pact-broker-advanced.md and references/pact-cicd.md.


Writing Consumer Tests and Provider Verification

When generating or reviewing Pact tests:

Before writing tests — check existing provider states and pacticipant names to avoid duplication:

contract-testing_get_provider_states  →  pacticipant: "ProviderName"
contract-testing_list_pacticipants    →  confirm exact names as registered in the broker

Provider verification must-haves — every provider verification config needs all three selectors and both flags:

consumerVersionSelectors: [
  { mainBranch: true },         // latest from consumer's main branch
  { matchingBranch: true },     // feature branch pair-testing
  { deployedOrReleased: true }, // ALL versions currently deployed/released anywhere
],
enablePending: true,            // new consumer interactions won't break provider CI
publishVerificationResults: process.env.CI === "true",  // only publish in CI
providerVersion: process.env.GIT_COMMIT,
providerVersionBranch: process.env.GIT_BRANCH,

Missing deployedOrReleased: true is the single most common reason can-i-deploy fails — the provider never verifies the version that's actually deployed in production.

Optional fields — Pact has no optional() or nullable() matcher. Use two separate interactions differentiated by provider states: one where the field is present, one where it's absent/null.

Message pacts (Kafka, SQS, SNS) — hexagonal architecture Split the code into two layers before writing tests:

  • Adapter — the Kafka/SQS listener, @KafkaListener, ConsumerRecord wiring. Pact does NOT test this.
  • Port — the domain function that receives the deserialized payload. Pact tests THIS directly.

The consumer test calls the Port directly with a Pact-generated message. No Kafka broker needed. See references/pact-messages.md for full JS and Java examples.


Other Diagnostic Patterns

Provider verification fails → use contract-testing_review_pact_tests with error_messages populated from the failing test output. Use contract-testing_get_provider_states to check whether the required state exists on the provider.

"Which version is deployed in staging?" → contract-testing_get_currently_deployed_versions with the staging environment UUID.

"What services depend on this provider?" → contract-testing_get_pacticipant_network to visualise the blast radius.

Investigating a specific consumer-provider failure in BDCT → start with contract-testing_get_bdct_cross_contract_verification_results, then drill into contract-testing_get_bdct_consumer_contract_verification_results_by_consumer_version for the failing pair. See references/bdct.md.


Workspace Management

When setting up a new service or onboarding a team:

  1. contract-testing_create_pacticipant — register the service
  2. contract-testing_patch_pacticipant — set mainBranch (e.g. main) so branch-based can-i-deploy works correctly
  3. contract-testing_list_environments — discover existing environment UUIDs
  4. contract-testing_create_environment — add new environments if needed

For auditing and observability:

  • contract-testing_get_metrics — workspace-wide usage statistics
  • contract-testing_get_team_metrics — per-team breakdown (PactFlow Cloud only)
  • contract-testing_list_integrations — all consumer-provider pairings

Deployment vs Release

ScenarioTool
Traditional service deployed to an environmentcontract-testing_record_deployment
Mobile app / library where multiple versions coexistcontract-testing_record_release
Check what's live in an environmentcontract-testing_get_currently_deployed_versions
Check what's supported (mobile/library)contract-testing_get_currently_supported_versions

record-deployment replaces the previous deployed version in that environment. record-release does not — both versions remain "supported" simultaneously.


Tool Naming

All tools in this skill use the contract-testing_ prefix. When the user is connected to PactFlow Cloud, all tools are available. When connected to an open-source Pact Broker, only non-Cloud tools are available (AI generation, BDCT, and team metrics require Cloud).

Comments

Markdown supported