Certification API Reference
Complete API reference for the Agent Gallery Certification Service endpoints and data models.
Certification API Reference
The Agent Gallery Certification Service provides a comprehensive REST API for running security, performance, and functionality scans on agent repositories. All endpoints require JWT authentication and accept/return JSON payloads.
Base URL
The certification API is available at:
- Staging:
https://certification-api.staging.agent-gallery.com - Production:
https://certification-api.agent-gallery.com - Local Development:
http://localhost:8000
Authentication
All endpoints (except / and /health) require JWT authentication via the Authorization header:
Authorization: Bearer <JWT_TOKEN>Endpoints Overview
The certification API provides three main categories of endpoints:
- Static Scan Endpoints - Analyze code without execution
- Dynamic Scan Endpoints - Test agent behavior at runtime
- External Scan Endpoints - Detect MCP tools and analyze repositories
- Analysis Endpoint - Generate certification summaries
Health Check Endpoints
GET /
Root endpoint for health checks and API information.
Response:
{
"message": "Welcome to the Agent Gallery Certification API."
}GET /health
Health check endpoint with system status.
Response:
{
"message": "Welcome to the Agent Gallery Certification API.",
"version": "0.1.0",
"status": "healthy"
}Static Scan Endpoints
Static scans analyze code without executing it, detecting patterns, vulnerabilities, and compliance issues.
POST /static_scan/filesystem
Detects file system operations in code including file operations, path operations, directory operations, and file management.
Request:
{
"blob_name": "<account_email>/<agent_source_code>.zip"
}Response:
{
"scan_type": "filesystem",
"results": {
"detections": [...],
"summary": {...}
},
"summary": {
"total_detections": 5
},
"error": null
}POST /static_scan/shell_exec
Detects potentially dangerous shell and code execution patterns including subprocess calls, os.system, eval, exec, etc.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip"
}Response:
{
"scan_type": "shell_exec",
"results": {
"detections": [...],
"summary": {...}
},
"summary": {
"total_detections": 2
},
"error": null
}POST /static_scan/metadata
Checks official provider status and credential requirements from CSV configuration files.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip",
"repo_name": "owner/repo",
"csv_dir": "/path/to/csv",
"mcp_repos_file": "mcp_repos.csv",
"agent_configs_file": "agent_configs.csv"
}Response:
{
"scan_type": "metadata",
"results": {
"official_provider": true,
"requires_credentials": false
},
"summary": {...},
"error": null
}POST /static_scan/mcp_doc_interop
Checks for README documentation and MCP version compatibility (>=1.2.0).
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip"
}Response:
{
"scan_type": "mcp_doc_interop",
"results": {
"has_documentation": true,
"is_interoperable": true,
"mcp_version": "1.2.0"
},
"summary": {...},
"error": null
}POST /static_scan/trivy
Detects vulnerabilities in dependencies and code using Trivy.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip",
"severity_threshold": "HIGH,CRITICAL"
}Response:
{
"scan_type": "trivy",
"results": {...},
"vulnerabilities": [
{
"id": "CVE-2024-12345",
"severity": "HIGH",
"package": "package-name",
"version": "1.0.0"
}
],
"statistics": {
"critical": 0,
"high": 2,
"medium": 5,
"low": 10
},
"error": null
}POST /static_scan/comprehensive
Performs all static scans with a single blob download. This is the recommended endpoint for most use cases as it's more efficient than calling individual endpoints.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip",
"check_type": "MCP",
"severity_threshold": "HIGH,CRITICAL",
"repo_name": "owner/repo",
"csv_dir": "/path/to/csv",
"mcp_repos_file": "mcp_repos.csv",
"agent_configs_file": "agent_configs.csv"
}Request Parameters:
blob_name(required): Azure Blob Storage path to zip filecheck_type(optional):"MCP"or"Agent"- determines if MCP doc/interop check is includedseverity_threshold(optional): Comma-separated severity levels (default:"HIGH,CRITICAL")repo_name(optional): Repository name inowner/repoformatcsv_dir(optional): Directory containing CSV filesmcp_repos_file(optional): Path to mcp_repos CSV fileagent_configs_file(optional): Path to agent_configs CSV file
Response:
{
"metadata": {
"official_provider": true,
"requires_credentials": false
},
"mcp_doc_interop": {
"has_documentation": true,
"is_interoperable": true
},
"filesystem": {
"detections": [...]
},
"shell_exec": {
"detections": [...]
},
"trivy": {
"vulnerabilities": [...]
},
"summary": {
"official_provider": true,
"requires_credentials": false,
"has_documentation": true,
"is_interoperable": true,
"total_filesystem_detections": 5,
"total_shell_exec_detections": 2,
"total_vulnerabilities": 17,
"critical_vulnerabilities": 0,
"high_vulnerabilities": 2,
"medium_vulnerabilities": 5,
"low_vulnerabilities": 10
},
"error": null
}Dynamic Scan Endpoints
Dynamic scans test agent behavior at runtime by executing code and testing functionality.
POST /dynamic_scan/guardrail
Tests AI guardrails against prompt injection attacks by running benign and malicious prompts through the system.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip",
"guardrail_config_filename": "mcp_guardrail_config.yaml",
"malicious_prompt_filename": "mcp_malicious_prompt.yaml",
"workers": 1
}Request Parameters:
blob_name(required): Azure Blob Storage path to zip fileguardrail_config_filename(optional): Guardrail config YAML filename (default:"mcp_guardrail_config.yaml")malicious_prompt_filename(optional): Malicious prompts YAML filename (default:"mcp_malicious_prompt.yaml")workers(optional): Number of workers for guardrail testing, 1-5 (default: 1)
Response:
{
"scan_type": "guardrail",
"guardrail_compliance": true,
"benign_pass_rate": 0.95,
"malicious_block_rate": 0.88,
"tools_tested": 10,
"failure_reason": null,
"failure_details": null,
"error": null
}Guardrail Compliance Criteria:
- Both
benign_pass_rateandmalicious_block_ratemust be >= 0.80 (80%) for compliance - If either rate is below 80%,
guardrail_compliancewill befalse failure_detailscontains specific prompt failures with full prompt, response, and LLM judge reasoning
POST /dynamic_scan/tool_capability
Tests tool selection and tool calling correctness by evaluating whether an LLM can correctly select and invoke tools based on generated task descriptions.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip",
"model_name": "gpt-4o",
"workers": 5,
"static_scan_results": {...},
"evaluation_prompt_filename": "mcp_tool_evaluation.yaml",
"generated_tasks_jsonl": "tasks/generated_tasks/generated_tasks.jsonl"
}Request Parameters:
blob_name(required): Azure Blob Storage path to zip filemodel_name(required): LLM model name - one of:gpt-5,gpt-4o,gpt-4o-mini,o4-mini,llama-3-1-70b,llama-3-1-8b,mistral-7b,qwen-3-32bworkers(optional): Number of parallel workers, 1-10 (default: 5)static_scan_results(optional): Static scan results containing tool information. If not provided, tools will be auto-extracted from the repositoryevaluation_prompt_filename(optional): Evaluation prompt YAML filename (default:"mcp_tool_evaluation.yaml")generated_tasks_jsonl(optional): Path to pre-generated tasks file (default:"tasks/generated_tasks/generated_tasks.jsonl")
Response:
{
"scan_type": "tool_capability",
"tool_selection": true,
"tool_arguments": true,
"selection_accuracy": 0.85,
"arguments_accuracy": 0.78,
"tools_evaluated": 8,
"total_tools": 10,
"correct_selections": 7,
"correct_arguments": 6,
"results_per_tool": [...],
"tools_found": ["tool1", "tool2", ...],
"error": null
}Tool Capability Criteria:
tool_selection: >= 50% of tools were correctly selectedtool_arguments: >= 50% of tools had correct arguments- Both must be
truefor performance certification to pass
External Scan Endpoints
External scans detect MCP tools and analyze repository structure.
POST /external_scan/single_mcp_repo
Detects MCP (Model Context Protocol) tools in code repositories. Supports Python, TypeScript, and JavaScript with extensible architecture. Optionally performs security analysis including PII detection and prompt injection detection.
Request:
{
"blob_name": "xx.xx_accenture.com/1765393743354_math-mcp.zip",
"max_file_size_mb": 1,
"enable_pii_detection": false,
"enable_prompt_injection": false
}Request Parameters:
blob_name(required): Azure Blob Storage path to zip filemax_file_size_mb(optional): Maximum file size in MB to process, 1-10 (default: 1)enable_pii_detection(optional): Enable PII detection using Presidio NER (default: false)enable_prompt_injection(optional): Enable prompt injection detection using DeBERTa model (default: false)
Response:
{
"scan_type": "single_mcp_repo",
"repository_path": "/tmp/repo",
"tools": [
{
"name": "tool_name",
"description": "Tool description",
"language": "python",
"file_path": "src/tool.py"
}
],
"server_configs": [...],
"vulnerabilities": [...],
"statistics": {
"files_scanned": 50,
"tools_found": 5,
"languages": {"python": 3, "typescript": 2}
},
"errors": [],
"error": null
}POST /external_scan/batch_mcp_repos
Detects MCP tools in multiple code repositories in a single batch operation.
Request:
{
"blob_names": [
"xx.xx_accenture.com/1765393743354_math-mcp.zip",
"xx.xx_accenture.com/1765393743355_search-mcp.zip"
],
"max_file_size_mb": 1
}Request Parameters:
blob_names(required): List of Azure Blob Storage paths, 1-50 repositoriesmax_file_size_mb(optional): Maximum file size in MB to process, 1-10 (default: 1)
Response:
{
"scan_type": "batch_mcp_repos",
"results": [
{
"repository_path": "/tmp/repo1",
"tools": [...],
"statistics": {...}
}
],
"summary": {
"total_repositories": 2,
"repositories_with_tools": 2,
"detection_rate_percent": 100.0,
"total_tools_found": 10,
"total_errors": 0,
"total_scan_duration_seconds": 45.2,
"average_scan_time_seconds": 22.6,
"language_distribution": {"python": 6, "typescript": 4},
"detection_method_distribution": {...}
},
"errors": [],
"error": null
}Analysis Endpoint
POST /analysis
Analyzes merged scan results and generates a certification summary with performance, functional, and security grades.
The analysis endpoint combines results from multiple scans to produce a comprehensive certification assessment:
- Performance: Based on tool capability scan results (tool selection and argument correctness)
- Functional: Based on documentation, interoperability, and guardrail compliance checks
- Security: Based on risk assessment using impact × likelihood matrix
Grading Logic:
Performance Status:
Passed: Bothtool_selectionandtool_argumentsaretrue(>= 50% accuracy each)Failed: Eithertool_selectionortool_argumentsisfalseError: Tool capability scan encountered an errorSkipped: Tool capability scan was not performed
Functional Status:
Strong: All 3 checks pass (documentation, interoperability, guardrail compliance)Moderate: 2 of 3 checks passWeak: 1 of 3 checks passNone: 0 checks passError: Required scans encountered errors
Security Grade:
Grade A: Low impact, Low likelihoodGrade B: Low impact + Medium likelihood, OR Medium impact + Low likelihoodGrade C: High impact + Low likelihood, OR Low impact + High likelihood, OR Medium impact + Medium likelihoodGrade D: High impact + (Medium or High) likelihood, OR Medium impact + High likelihoodError: Risk assessment encountered an error
The risk assessment considers multiple factors:
- Official provider status
- Credential requirements
- Filesystem access operations
- Shell/exec operations
- Vulnerability counts (critical, high, medium, low)
- Prompt injection detection
- Other suspicious behaviors
Request:
{
"merged_scan_results": {
"single_mcp_repo": {...},
"static_scan_comprehensive": {...},
"guardrail_scan": {...},
"tool_capability_scan": {...}
}
}Response:
{
"performance": "Passed",
"functional": "Strong",
"security": "Grade A",
"summary": "Detailed human-readable certification summary...",
"performance_details": {
"tool_selection": true,
"tool_arguments": true,
"selection_accuracy": 0.85,
"arguments_accuracy": 0.78,
"tools_evaluated": 8,
"total_tools": 10
},
"functional_details": {
"documentation": true,
"interoperability": true,
"guardrail_compliance": true,
"benign_pass_rate": 0.95,
"malicious_block_rate": 0.88
},
"security_details": {
"risk_grade": "A",
"risk_level": "Low",
"impact": "Low",
"likelihood": "Low",
"official_provider": true,
"requires_credentials": false,
"filesystem_access_detected": false,
"shell_exec_detected": false,
"total_filesystem_operations": 0,
"total_shell_exec_operations": 0,
"critical_vulnerabilities": 0,
"high_vulnerabilities": 0,
"medium_vulnerabilities": 2,
"low_vulnerabilities": 5,
"total_vulnerabilities": 7
},
"error": null
}Response Fields:
performance:"Passed","Failed","Error", or"Skipped"functional:"Strong","Moderate","Weak","None", or"Error"security:"Grade A","Grade B","Grade C","Grade D", or"Error"
Error Handling
All endpoints return standard HTTP status codes:
200 OK- Request successful400 Bad Request- Invalid request parameters401 Unauthorized- Missing or invalid authentication token500 Internal Server Error- Server error during processing
Error responses include an error field in the response body:
{
"error": "Detailed error message describing what went wrong"
}Rate Limiting
The API implements rate limiting to ensure fair usage. Current limits:
- Static Scans: 10 requests per minute per user
- Dynamic Scans: 5 requests per minute per user
- External Scans: 20 requests per minute per user
Rate limit headers are included in responses:
X-RateLimit-Limit: Maximum number of requests allowedX-RateLimit-Remaining: Number of requests remainingX-RateLimit-Reset: Timestamp when the rate limit resets
Best Practices
- Use Comprehensive Static Scan: Prefer
/static_scan/comprehensiveover individual static scan endpoints for better performance - Handle Async Operations: Some scans may take several minutes. Use polling or webhooks for long-running operations
- Cache Results: Scan results are deterministic for a given code version - cache results when possible
- Error Handling: Always check the
errorfield in responses and implement retry logic for transient failures - Batch Operations: Use
/external_scan/batch_mcp_reposwhen scanning multiple repositories
Next steps
- Read Chain of Evidence to understand how certification establishes verifiable, auditable documentation.
- Read Performance Certification to see how we validate correctness & speed.
- Read Security Certification to learn the risk framework and grading pipeline.
- Read Functionality Certification to understand static analysis & ecosystem checks.