mcp-azdo
v2.0.0
Published
A command-line tool that provides a set of utilities to interact with Azure DevOps services, designed to be used as a Model Context Protocol (MCP) server. It allows you to manage test cases, test suites, and other work items.
Maintainers
Readme
MCP-AZDO: Azure DevOps Tools for Model Context Protocol
mcp-azdo is a command-line tool that provides a set of utilities to interact with Azure DevOps services, designed to be used as a Model Context Protocol (MCP) server. It allows you to manage test cases, test suites, and other work items.
Features
- Azure DevOps Integration:
- Fetch work item details
- Create new test cases with detailed steps, priority, and assignments
- AI-powered test step parser - Convert natural language to structured test steps using GPT-4o-mini
- AI-powered DevOps story creation - Automatically create DevOps stories from GitHub PRs for feature flags and pipelines
- Optionally create child test suites under a parent plan/suite when creating test cases
- Update test cases with automation details
- Create or retrieve static test suites
- Add existing test cases to test suites
- Copy test cases between suites
- JIRA Integration:
- Fetch JIRA issue details
- Link test cases to JIRA issues with automatic ADF formatting
- Create JIRA subtasks with predefined templates
- Bidirectional linking between Azure DevOps and JIRA
- Splunk Integration:
- Execute Splunk search queries using SPL (Search Processing Language)
- Search through Splunk indexes for logs, metrics, and machine data
- Configurable time ranges and result limits
- GitHub Integration:
- Automated error triage with GitHub commit analysis
- Retrieve recent commits to identify potential root causes
- Link Jira tickets to related GitHub pull requests and commits
- Analyze GitHub PRs to extract feature flag and deployment information for DevOps story creation
- Automated Error Triage:
- Analyze production errors from Splunk logs automatically
- Generate error signatures to group similar issues
- Cross-reference with GitHub commits to identify suspected root causes
- Create detailed Jira tickets with investigation starting points
- Prevent duplicate ticket creation through state management
Prerequisites
Before using this tool, ensure you have Node.js and npm installed.
Installation
For End-Users (once published to npm)
npm install -g mcp-azdoThen you can run the tool using azdo-mcp or via npx:
npx mcp-azdoFor Developers (local setup)
- Clone the repository:
git clone <your-repository-url> cd mcp-azdo - Install dependencies:
npm install - Build the project:
npm run build - Link the package for local development:
This will make thenpm linkazdo-mcpcommand available globally, pointing to your local project.
Configuration
This tool requires the following environment variables to be set to authenticate and interact with Azure DevOps, JIRA, Splunk, and GitHub:
Required Variables
Azure DevOps:
AZDO_ORG: Your Azure DevOps organization name.AZDO_PROJECT: Your Azure DevOps project name.AZDO_PAT: Your Azure DevOps Personal Access Token. The PAT must have sufficient permissions (e.g., "Read & write" for Work Items and "Read & write" for Test Management).
JIRA:
JIRA_PAT: Your JIRA API key for authentication (Base64 encoded "email:api_token" string).JIRA_API_BASE_URL: Your JIRA instance base URL (e.g., "https://your-domain.atlassian.net").
Optional Variables
Splunk (optional):
SPLUNK_URL: Full Splunk URL (e.g., "https://your-splunk.com:8089") ORSPLUNK_HOST: Splunk hostname (e.g., "your-splunk.com")SPLUNK_PORT: Splunk API port (default: 8089)SPLUNK_SCHEME: Protocol to use (http or https)SPLUNK_TOKEN: Splunk authentication tokenVERIFY_SSL: Whether to verify SSL certificates (true or false)
GitHub (optional - required for error triage features):
GITHUB_TOKENorGITHUB_PAT: GitHub Personal Access Token for API access- Required permissions:
repo(for private repos) orpublic_repo(for public repos) - Used for automated error triage to fetch commit history and analyze potential root causes
- Required permissions:
OpenAI (recommended - used by default for AI-powered test step parsing):
OPENAI_API_KEY: Your OpenAI API keyOPENAI_API_BASE_URL: OpenAI API endpoint URL (e.g., "https://api.openai.com/v1")- Used by default for AI-powered natural language parsing of test steps
- Model used:
azure-gpt-4o-mini(cost-effective and fast) - Automatically falls back to rule-based parsing if not configured
You can set these variables in your shell environment or by creating a .env file in the root of this project with the following format:
# Azure DevOps (Required)
AZDO_ORG=YourOrganizationName
AZDO_PROJECT=YourProjectName
AZDO_PAT=YourPersonalAccessToken
# JIRA (Required)
JIRA_PAT=YourBase64EncodedJiraToken
JIRA_API_BASE_URL=https://your-domain.atlassian.net
# Splunk (Optional)
SPLUNK_URL=https://your-splunk.com:8089
SPLUNK_TOKEN=YourSplunkToken
VERIFY_SSL=false
# GitHub (Optional - for error triage features)
GITHUB_TOKEN=your_github_personal_access_token
# OpenAI (Optional - for AI-powered test step parsing)
OPENAI_API_KEY=your_openai_api_key
OPENAI_API_BASE_URL=https://api.openai.com/v1When used as an MCP server, these environment variables can also be passed via the MCP host's configuration.
Usage
Once installed and configured, the tool can be run as an MCP server.
If installed globally or linked:
azdo-mcpIf using npx (after publishing):
npx mcp-azdoThe server will then listen for MCP requests.
Available Tools (MCP Commands)
The following tools are exposed by this MCP server:
fetch-item- Description: Get Azure DevOps details or JIRA details for a specific work item.
- Parameters:
itemId(string): The ID of the work item to fetch (either AZDO or JIRA)
create-testcase- Description: Creates a new Test Case work item, optionally creates a new test suite, places the test case under the test suite in Azure DevOps, and can optionally link it to a JIRA issue. Supports cloning existing test cases and applying QA tags. Uses AI-powered parsing by default with automatic fallback to rule-based parsing.
- Parameters:
title(string): The title of the test case.areaPath(string, optional): The Area Path for the test case.iterationPath(string, optional): The Iteration Path for the test case.steps(string, optional): Multi-line natural language string describing test steps. AI parsing is used automatically. If cloneFrom is provided and steps is empty, steps will be inherited from the source test case.cloneFrom(string, optional): NEW - Azure DevOps Test Case ID to clone from. When provided, the new test case will inherit all fields (title, steps, area path, iteration path, priority, state, automation status, etc.) from the existing test case. User-provided parameters override cloned values.priority(number, optional): Priority of the test case (1-4).assignedTo(string, optional): User to assign the test case to.state(string, optional): Initial state (e.g., "Design").reason(string, optional): Reason for the initial state.automationStatus(string, optional): Automation status (e.g., "Not Automated").destinationUrl(string, optional): Azure DevOps test plan URL containing planId and suiteId (e.g.,https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710). If provided, the test case will be added to the specified test suite.jiraWorkItemId(string, optional): The JIRA issue ID to link the test case to.createTestSuite(boolean, optional): When false, the test case will be added directly to the suite specified in destinationUrl instead of creating a new child suite. Default is true.addQATags(boolean, optional): NEW - When true, populates the System.Tags field with predefined QA environment tags (Deployment Regression, Web04, QA, QAC, TRN, UAT, Run.Day1). Default is false.
- Notes:
- If you don't provide a destinationUrl, the function only creates the test case without adding it to any test suite.
- The destinationUrl is parsed to extract planId and suiteId automatically.
- Cloning: Use
cloneFromto duplicate an existing test case. All fields are inherited, but you can override any field by providing it explicitly (e.g., provide a differenttitleto clone with a new name). - QA Tags: When
addQATags=true, predefined QA environment tags are applied. If cloning, QA tags replace any tags from the source test case.
update-automated-test- Description: Updates an Azure DevOps Test Case with automated test details. This is useful when you are creating automated test case and need bind your test code with the test case.
- Parameters:
testCaseId(number): The ID of the Test Case work item.automatedTestName(string): The fully qualified name of the automated test method.automatedTestStorage(string): The name of the test assembly or DLL.
add-testcase-to-testsuite- Description: Adds existing test cases to a specified test suite and optionally links them to a JIRA issue.
- Parameters:
testCaseIdString(string): The comma-delim ID string of the Test Case (e.g. 12345,45566).destinationUrl(string): Azure DevOps test plan URL containing planId and suiteId (e.g.,https://dev.azure.com/Org/Project/_testPlans/execute?planId=123&suiteId=456).jiraWorkItemId(string, optional): The JIRA issue ID to link the test case(s) to.createCopy(boolean, optional): When true, creates new copies of the test cases instead of references. Default is true.
- Notes:
- The destinationUrl is parsed to extract planId and suiteId automatically.
copy-testcases-to-testsuite- Description: Copies all test cases from a source test suite to a new test suite (created with the same name as the source suite) under a specified destination test plan and parent suite, with optional JIRA issue linking. Supports recursive copying of entire suite hierarchies.
- Parameters:
sourceUrl(string): Azure DevOps source test plan URL containing planId and suiteId (e.g.,https://dev.azure.com/Org/Project/_testPlans/execute?planId=123&suiteId=456).destinationUrl(string): Azure DevOps destination test plan URL containing planId and suiteId (e.g.,https://dev.azure.com/Org/Project/_testPlans/execute?planId=789&suiteId=101).jiraWorkItemId(string, optional): The JIRA issue ID to link all copied test cases to.createCopy(boolean, optional): When true, creates new copies of the test cases instead of references. Default is true.createTestSuite(boolean, optional): When false, the test cases will be added directly to the destination suite instead of creating a new child suite. Default is true.recursive(boolean, optional): When true, recursively copies all child test suites and their test cases, preserving the entire suite hierarchy. Default is false.
- Notes:
- Both sourceUrl and destinationUrl are parsed automatically to extract planId and suiteId.
- Recursive Mode: When
recursive=true, the tool will copy the entire suite hierarchy including all nested child suites. This is useful for duplicating complex test structures. - Performance: Large hierarchies (50+ suites) may take several minutes. Rate limiting (100ms delay) is applied automatically to avoid overwhelming the API.
- Limitations: Maximum recursion depth is 10 levels to prevent infinite loops.
- Statistics: Recursive operations return detailed statistics including total suites and test cases copied, with success and error messages for each operation.
create-jira-subtasks- Description: Creates subtasks in Jira for a specified parent issue. The subtasks will inherit fields like project, agile team, and sprint from the parent issue.
- Parameters:
parentJiraId(string): The ID or key of the parent Jira issue (e.g., "CDH-342").subtaskSummaries(string[], optional): Array of summary texts for each subtask to create. Required if templateType is 'customized' or not provided.templateType(string, optional): The template type for subtask summaries. Possible values:"customized"(default): User must provide subtaskSummaries."FF": Pre-populates with feature flag related subtasks."Regular": Pre-populates with standard development subtasks.
add-testcase-jira- Description: Associate AZDO test cases to JIRA and update AZDO test cases description with JIRA workitem.
- Parameters:
testCaseIdString(string): Comma-separated string of AZDO Test Case IDs.jiraWorkItemId(string): The JIRA issue ID to link the test cases to.
get-all-testcases-from-testsuite- Description: Retrieves all test cases from a specified test suite in Azure DevOps.
- Parameters:
destinationUrl(string): Azure DevOps test plan URL containing planId and suiteId (e.g.,https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710).
- Returns:
- A list of test cases with their details including work item information.
- Notes:
- The destinationUrl is parsed to extract planId and suiteId automatically.
get-child-test-suites- Description: Retrieves all child test suites for a specific test suite in Azure DevOps. This command is used to create tracking items for production release.
- Parameters:
destinationUrl(string): Azure DevOps test plan URL containing planId and suiteId (e.g.,https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710).
- Returns:
- A list of child test suites with their details including names and IDs.
- Notes:
- The destinationUrl is parsed to extract planId and suiteId automatically.
search_splunk(Optional - requires Splunk and OpenAI configuration)- Description: Execute a Splunk search using natural language powered by AI. The tool automatically converts your plain English query into SPL (Search Processing Language) and executes it.
- Parameters:
query(string): Natural language search query (e.g., "show me errors for the consumer portal in prod", "find all 500 errors in the last hour").earliest_time(string, optional): Start time for the Splunk search (e.g., "-24h", "-7d", "2024-01-01T00:00:00"). Default: "-24h".latest_time(string, optional): End time for the Splunk search. Default: "now".
- Returns:
- Generated SPL query and first 25 results with pagination support.
- Features:
- AI-powered query generation - converts natural language to SPL automatically
- Pagination - returns first 25 results, use
get_next_splunk_resultsfor more - Session management - maintains search context for pagination
- Notes:
- Requires Splunk and OpenAI environment variables (see Configuration section).
- If Splunk is not configured, this tool will not be available.
search_splunk_byquery(Optional - requires Splunk configuration)- Description: Execute a Splunk search query using raw SPL (Search Processing Language). For users who prefer to write SPL directly.
- Parameters:
search_query(string): The raw Splunk SPL query to execute (e.g., "index=app_logs level=ERROR | head 50").earliest_time(string, optional): Start time for the Splunk search (e.g., "-24h", "-7d", "2024-01-01T00:00:00"). Default: "-24h".latest_time(string, optional): End time for the Splunk search. Default: "now".max_results(number, optional): Maximum number of Splunk events to return. Default: 20.
- Returns:
- JSON array of search results with matching events and fields.
- Notes:
- For direct SPL queries without AI conversion.
- Use
search_splunk(natural language) if you prefer plain English queries.
get_next_splunk_results(Optional - requires Splunk configuration)- Description: Retrieves the next page of results (25 items) from the previous
search_splunkquery. - Parameters: None (uses active search session)
- Returns:
- Next 25 results from the active search job.
- Notes:
- Only works after executing a
search_splunkquery. - Maintains pagination state automatically.
- Only works after executing a
- Description: Retrieves the next page of results (25 items) from the previous
triage_splunk_error(Optional - requires GitHub configuration)- Description: Parse raw Splunk JSON data and analyze GitHub commits to identify suspected root causes for production errors. This is an analysis-only tool that provides structured insights for manual investigation.
- Parameters:
rawSplunkData(string): Raw Splunk JSON string containing error details and stack trace (must include Application, Environment, _time, and _raw fields)repositoryName(string): GitHub repository name in format 'owner/repo' (e.g., 'company/service-repo')commitLookbackDays(number, optional): Number of days to look back for commits (1-30, default: 7)
- Returns:
- Structured analysis report with error details, stack trace analysis, and suspected commits
- Features:
- Raw Splunk JSON Parsing: Extracts structured error information from Splunk event data
- Stack Trace Analysis: Intelligently parses .NET stack traces to identify key files, methods, and line numbers
- Search Keywords Generation: Automatically extracts files, methods, and context clues for investigation
- GitHub Commit Analysis: Fetches and analyzes recent commits using extracted keywords
- Commit Relevance Scoring: Ranks commits by relevance to the error using smart matching algorithms
- Investigation Starting Points: Provides clear, actionable investigation focus areas
- Analysis Output Includes:
- Service name, environment, and timestamp
- Exception type and error message
- Parsed stack trace with key files and methods
- Search keywords categorized by files, methods, and context
- Ranked list of suspected commits with authors and dates
- Structured investigation recommendations
- Notes:
- Analysis-only tool - does not create tickets or modify any systems
- Requires GitHub token for commit analysis (GITHUB_TOKEN or GITHUB_PAT environment variable)
- Input must be complete raw Splunk JSON with nested _raw field containing error details
- Designed specifically for .NET applications but extensible to other stack traces
- Gracefully handles missing GitHub configuration by skipping commit analysis
- Results provide comprehensive starting points for manual error investigation and can inform Jira ticket creation
create-devops(Optional - requires GitHub and OpenAI configuration)- Description: Automatically creates Azure DevOps stories from GitHub Pull Request URLs. Intelligently extracts feature flag names, deployment dates, and application information from PRs using AI.
- Parameters:
userRequest(string): Natural language request with GitHub PR URL. Examples:"create ff https://github.com/owner/repo/pull/123"- Creates a feature flag story"remove ff https://github.com/owner/repo/pull/456"- Creates a feature flag removal story"create pipeline for https://github.com/owner/repo/pull/789"- Creates a pipeline execution story
- Returns:
- Created DevOps story with work item ID and URL
- Features:
- AI-Powered Request Parsing: Uses OpenAI to understand natural language requests
- PR Analysis: Automatically extracts feature flag names, deployment dates, and app names from PR descriptions
- Date Mapping: Converts production deployment versions to UAT dates
- Pipeline Discovery: Automatically finds and links Azure DevOps pipelines
- Three Story Types:
- CreateFF: Creates feature flag addition stories with proper tagging and metadata
- RemoveFF: Creates feature flag removal stories
- Pipeline: Creates pipeline execution stories with pipeline URLs
- Story Fields:
- Title:
[Month] Add/Remove {FFName} FFor[Month] {AppName} Run Pipeline - Description: Context-specific with scope, names, and URLs
- Tags: Properly formatted for filtering and organization
- Custom Fields: Desired Date, Impacted Environments, Prod Deployment
- Title:
- Notes:
- Requires GitHub token (GITHUB_TOKEN or GITHUB_PAT) for PR analysis
- Requires OpenAI API key (OPENAI_API_KEY) for AI-powered parsing
- Automatically handles malformed JSON in config files with fallback parsing
- Converts numeric month formats (2026.02) to abbreviated formats (2026.Feb)
- See
src/devops/README.mdfor detailed documentation and troubleshooting
Example Usage
Here are examples of how to use the MCP tools:
Basic Test Case Management
// Create a new test case with JIRA linking using destinationUrl
await mcp.call("create-testcase", {
title: "Test user login functionality",
steps: "1. Navigate to login page\n2. Enter valid credentials\n3. Click login button\nExpected: User should be logged in successfully",
priority: 2,
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710",
jiraWorkItemId: "PROJ-789"
});
// Create a test case with natural language (AI parsing is automatic)
await mcp.call("create-testcase", {
title: "E2E shopping cart test",
steps: "As a user, I want to test the shopping cart. Browse products, add 3 items to cart. Proceed to checkout and verify all items are listed with correct prices. Complete purchase and ensure confirmation email is sent.",
priority: 1,
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710"
});
// Create a test case directly in a suite without creating a child suite
await mcp.call("create-testcase", {
title: "Simple validation test",
steps: "Verify homepage loads correctly",
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710",
createTestSuite: false
});
// Clone an existing test case with all its fields
await mcp.call("create-testcase", {
cloneFrom: "12345",
title: "Copy of Login Test - Variant A"
// Inherits steps, priority, area path, etc. from test case 12345
});
// Clone a test case and apply QA tags
await mcp.call("create-testcase", {
cloneFrom: "12345",
addQATags: true,
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710"
});
// Create a new test case with QA tags (no cloning)
await mcp.call("create-testcase", {
title: "QA Regression Test",
steps: "Run standard regression suite",
addQATags: true,
priority: 1
});
// Add existing test cases to a test suite
await mcp.call("add-testcase-to-testsuite", {
testCaseIdString: "1001,1002,1003",
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470969&suiteId=487710",
createCopy: true
});Advanced Test Suite Management
// Copy a single test suite (non-recursive)
await mcp.call("copy-testcases-to-testsuite", {
sourceUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470955&suiteId=471146",
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470955&suiteId=507151",
createCopy: false, // Create references instead of copies
createTestSuite: true // Create a new child suite at destination
});
// Recursively copy an entire test suite hierarchy with all nested child suites
await mcp.call("copy-testcases-to-testsuite", {
sourceUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470955&suiteId=471146",
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=470955&suiteId=507151",
recursive: true, // Enable recursive copying
createCopy: false, // Use references for efficiency
jiraWorkItemId: "PROJ-456" // Link all copied test cases to JIRA
});
// Result: Copies entire hierarchy preserving structure
// Example output: "Successfully copied 127 test cases across 15 suites"
// Copy and link to JIRA without recursion
await mcp.call("copy-testcases-to-testsuite", {
sourceUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=123&suiteId=456",
destinationUrl: "https://dev.azure.com/WEXHealthTech/Health/_testPlans/execute?planId=789&suiteId=101",
createCopy: true, // Create actual copies
jiraWorkItemId: "RELEASE-2024"
});JIRA Integration
// Create JIRA subtasks with predefined templates
await mcp.call("create-jira-subtasks", {
parentJiraId: "PROJ-123",
templateType: "FF", // Feature Flag template
});
// Or create custom subtasks
await mcp.call("create-jira-subtasks", {
parentJiraId: "PROJ-123",
templateType: "customized",
subtaskSummaries: [
"Implement backend API changes",
"Update frontend components",
"Write unit tests",
"Update documentation"
]
});Splunk Log Analysis
// Search Splunk logs using natural language (AI-powered)
await mcp.call("search_splunk", {
query: "show me all errors in the consumer portal from the last 24 hours",
earliest_time: "-24h",
latest_time: "now"
});
// Returns: Generated SPL query + first 25 results
// Get more results from the same search
await mcp.call("get_next_splunk_results", {});
// Or use raw SPL queries directly
await mcp.call("search_splunk_byquery", {
search_query: "index=app_logs level=ERROR | head 50",
earliest_time: "-24h",
latest_time: "now",
max_results: 50
});Automated Error Triage
// Analyze raw Splunk JSON data for investigation insights
const rawSplunkData = JSON.stringify({
"Application": "WexHealth.CDH.Web.Consumer",
"Environment": "QA",
"_time": "2025-10-16T09:13:57.833-05:00",
"_raw": "{\"@t\":\"2025-10-16T14:13:57.8339402Z\",\"@mt\":\"[DocumentIndexService] Operation 'Get Shareable Url' failed!\",\"@x\":\"WEXHealth.Enterprise.DocumentIndex.SDK.DocumentIndexApiException: \\\"Object reference not set to an instance of an object.\\\"\\r\\n at WEXHealth.Enterprise.DocumentIndex.SDK.Utils.HttpClientExtensions.<ReadAsJsonAsync>d__0`1.MoveNext()\\r\\n at WEXHealth.Enterprise.DocumentIndex.SDK.ApiClient.<GetJsonAsync>d__5`1.MoveNext()\\r\\n at WEXHealth.Enterprise.DocumentIndex.SDK.DocumentIndexApi.<GetShareableUrlAsync>d__35.MoveNext()\\r\\n at Lighthouse1.Platform.Storage.Providers.SdkApiClient.GetShareableUrl(String objectId, DateTimeOffset expiration) in E:\\\\build\\\\src\\\\SdkApiClient.cs:line 173\\r\\n at Lighthouse1.Platform.Storage.Providers.DocumentIndexProvider.GetShareableUrl(String objectId, DateTimeOffset expiration) in E:\\\\build\\\\src\\\\DocumentIndexProvider.cs:line 299\",\"SourceContext\":\"Lighthouse1.Platform.Storage.Providers.DocumentIndexProvider\"}"
});
// Complete error analysis with GitHub commit investigation
const analysisResult = await mcp.call("triage_splunk_error", {
rawSplunkData: rawSplunkData,
repositoryName: "wexhealth/document-service",
commitLookbackDays: 7
});
// Quick analysis with shorter lookback for recent changes
const quickAnalysis = await mcp.call("triage_splunk_error", {
rawSplunkData: rawSplunkData,
repositoryName: "wexhealth/document-service",
commitLookbackDays: 3
});
// Analysis output provides structured investigation starting points:
// • Service: WexHealth.CDH.Web.Consumer (QA)
// • Exception: DocumentIndexApiException
// • Key files: SdkApiClient.cs, DocumentIndexProvider.cs, etc.
// • Key methods: GetShareableUrl, ReadAsJsonAsync, etc.
// • Suspected commits: Recent changes ranked by relevanceDevOps Story Creation from GitHub PRs
// Create feature flag addition story
await mcp.call("create-devops", {
userRequest: "create ff https://github.com/wexinc/health-cdh-investment-api/pull/757"
});
// Result: DevOps Story ID 506979
// Title: [February] Add EnhanceInstrumentExplore372190 FF
// Tags: FeatureFlags, Scope:WexHealth.CDH.Investment.WebApi
// Create feature flag removal story
await mcp.call("create-devops", {
userRequest: "remove ff https://github.com/wexinc/health-cdh-authservice/pull/123"
});
// Create pipeline execution story
await mcp.call("create-devops", {
userRequest: "create pipeline for https://github.com/wexinc/health-cdh-investment-api/pull/757"
});
// Result: DevOps Story ID 507010
// Title: [February] WexHealth.CDH.Investment.WebApi Run Pipeline
// Pipeline: cdh-investment-api-az-cdMulti-Platform Workflow Example
// Complete workflow: Create test case, link to JIRA, and monitor results
async function completeTestWorkflow() {
// 1. Create test case
const testCase = await mcp.call("create-testcase", {
title: "API endpoint authentication test",
steps: "1. Send request without auth token\nExpected: 401 Unauthorized\n2. Send request with valid token\nExpected: 200 OK",
jiraWorkItemId: "AUTH-456"
});
// 2. Link to automation
await mcp.call("update-automated-test", {
testCaseId: testCase.id,
automatedTestName: "ApiTests.AuthenticationTests.TestEndpointAuth",
automatedTestStorage: "ApiTests.dll"
});
// 3. Monitor test execution in Splunk
await mcp.call("search_splunk_byquery", {
search_query: `index=test_results test_case_id=${testCase.id} | head 20`,
earliest_time: "-7d"
});
}Development
To build the project from source:
npm run buildThis compiles the TypeScript files from src/ to JavaScript in the build/ directory.
License
ISC
