DevAssist
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DevAssistlist all services"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DevAssist
DevAssist is a developer-support automation platform designed to reduce the amount of manual context gathering required when troubleshooting application and service issues.
It combines service ownership, dependency information, incidents, runbooks, deterministic diagnostics, structured logging, distributed tracing, and AI-tool integration behind a common application boundary.
The project was built as a practical exploration of developer productivity, support engineering, federated GraphQL, observability, and safe automation.
Why DevAssist?
A support engineer investigating an application problem often has to answer several questions before meaningful troubleshooting can begin:
Who owns this service?
What does it depend on?
Is there an active incident?
Is a runbook available?
Is the service reachable?
Are its dependencies healthy?
Is authentication configured correctly?
Where did a request fail across multiple services?
DevAssist brings those signals together into one support-focused interface.
Instead of replacing engineering judgment, the platform is designed to make the information required for that judgment faster and easier to obtain.
Related MCP server: devops-mcp-server
Features
Service Catalog
DevAssist maintains service metadata including:
Service name
Ownership
Tier
Health
Endpoint
Dependencies
The Catalog domain is exposed through its own Apollo Federation subgraph.
Support Context
The Support domain provides:
Active incidents
Incident severity and status
Troubleshooting runbooks
Diagnostic execution
Support information is exposed through a separate federated GraphQL subgraph.
Deterministic Diagnostics
DevAssist includes safe, deterministic diagnostic checks rather than arbitrary remote shell execution.
Current checks include:
DNS registration
HTTP reachability
Authentication configuration
Dependency health
Diagnostic execution is also available through a REST API.
Federated GraphQL
DevAssist uses Apollo Federation to separate service catalog and support concerns while presenting clients with a unified GraphQL API.
Current subgraphs:
catalogsupport
The Gateway composes those subgraphs into a single graph.
REST API
Operational actions such as diagnostics are exposed through REST endpoints.
This intentionally separates action-oriented operations from GraphQL data retrieval.
JWT Authentication
The Gateway protects application APIs using JWT authentication.
The current local environment uses demo credentials for development purposes.
MCP Integration
DevAssist includes a Model Context Protocol server that exposes selected support functionality to compatible AI tooling.
Current MCP tools include:
list-servicesget-servicerun-diagnostic
The MCP server uses the DevAssist Gateway rather than bypassing application boundaries, allowing the same authorization and service interfaces to remain in effect.
Structured Logging
Backend services use Pino for structured application and HTTP logging.
Each request receives a unique x-request-id that is propagated across service boundaries.
This allows a request to be correlated across:
Gateway
Catalog
Support
Diagnostic operations
Sensitive values such as authorization tokens and cookies are redacted from logs.
Distributed Tracing
DevAssist uses OpenTelemetry with W3C Trace Context propagation.
Trace context is propagated across both:
Apollo Federation GraphQL requests
Gateway-to-Support REST diagnostic requests
Individual services are represented independently in the trace:
devassist-gatewaydevassist-catalogdevassist-support
A federated GraphQL request can therefore be visualized as:
+-------------------+
| Catalog Subgraph |
+---------+---------+
^
|
+---------+ +--------+--------+
| Browser | ----> | Gateway |
+---------+ +--------+--------+
|
v
+---------+---------+
| Support Subgraph |
+-------------------+A diagnostic request produces a trace such as:
+---------+
| Gateway |
+----+----+
|
v
+----+----+
| Support |
+----+----+
|
v
+----------------+
| diagnostic.run |
+----------------+This makes it possible to see request timing and service boundaries rather than relying only on individual log entries.
Request IDs vs. Trace IDs
DevAssist deliberately maintains both application request IDs and OpenTelemetry trace IDs.
Request ID
x-request-id is a simple application-level correlation identifier.
It is particularly useful when:
Searching logs
Following a support request manually
Communicating an identifier between engineers
Correlating events without an observability backend
Trace ID
The OpenTelemetry trace ID represents distributed execution context.
It allows an observability platform to reconstruct:
Parent-child span relationships
Service boundaries
Timing
Latency
Errors
Span metadata
Using both mechanisms provides straightforward operational log correlation while retaining full distributed tracing capability.
Architecture
+------------------+
| React UI |
| :5173 |
+---------+--------+
|
|
v
+---------+--------+
| Node Gateway |
| :4000 |
| |
| JWT / REST / GQL |
+----+--------+----+
| |
GraphQL | | GraphQL
| |
+--------------+ +--------------+
| |
v v
+---------+---------+ +---------+---------+
| Catalog Subgraph | | Support Subgraph |
| :4001 | | :4002 |
+-------------------+ +---------+---------+
|
|
v
+--------+--------+
| Diagnostics |
+-----------------+
+-------------------+
| MCP Server |
+---------+---------+
|
|
v
Gateway APIsThe application is intentionally divided by responsibility.
The Catalog service owns information about services and dependencies.
The Support service owns incidents, runbooks, and diagnostic functionality.
The Gateway provides the external application boundary and composes the federated graph.
The MCP server consumes those same application interfaces rather than creating a privileged side channel.
Technology Stack
Backend
Node.js
JavaScript
Express
Apollo Server
Apollo Gateway
Apollo Federation
GraphQL
REST
JSON Web Tokens
Pino
OpenTelemetry
Frontend
React
Vite
HTML
CSS
JavaScript
Developer Tooling
npm workspaces
Git
GitHub
GitHub Actions
Node.js test tooling
AI Integration
Model Context Protocol (MCP)
Observability
Pino structured logging
Request correlation
OpenTelemetry
W3C Trace Context
OTLP/HTTP
Jaeger-compatible tracing
Repository Structure
devassist/
|
+-- services/
| |
| +-- gateway/
| | +-- src/
| | +-- index.js
| | +-- logger.js
| | +-- telemetry.js
| | +-- tracing.js
| |
| +-- catalog/
| | +-- src/
| | +-- index.js
| | +-- schema.js
| | +-- logger.js
| | +-- telemetry.js
| | +-- graphqlTracing.js
| |
| +-- support/
| +-- src/
| +-- index.js
| +-- schema.js
| +-- diagnostics.js
| +-- logger.js
| +-- telemetry.js
| +-- tracing.js
|
+-- web/
| +-- src/
|
+-- mcp/
|
+-- docs/
| +-- ARCHITECTURE.md
|
+-- .github/
|
+-- .editorconfig
+-- .gitattributes
+-- package.json
+-- package-lock.json
+-- README.mdThe exact contents of individual directories may evolve as the project grows.
Requirements
For normal local development:
Node.js 24 LTS
npm
For local distributed-tracing visualization:
Jaeger 2.x or another OTLP-compatible observability backend
Jaeger is optional and is not required for DevAssist itself to run.
Getting Started
Clone the repository:
git clone https://github.com/timcotterell/devassist.git
cd devassistInstall dependencies:
npm installStart the development environment:
npm run devThe root development command starts the application components in dependency order.
Once startup is complete, open:
http://localhost:5173Local Demo Credentials
The local demo environment uses:
Username: developer
Password: demo-passwordThese credentials are intended only for local development and demonstration.
Production authentication would use an external identity provider and stronger key-management practices rather than embedded demonstration credentials.
Local Ports
Component | Port |
React UI | 5173 |
Gateway | 4000 |
Catalog Subgraph | 4001 |
Support Subgraph | 4002 |
Jaeger UI | 16686 |
OTLP/HTTP | 4318 |
Running Jaeger Locally
DevAssist exports OpenTelemetry traces over OTLP/HTTP.
By default, local tracing uses:
http://localhost:4318/v1/tracesThe Jaeger UI is normally available at:
http://localhost:16686Start a local Jaeger instance before starting DevAssist if trace visualization is desired.
Then:
npm run devUse the application normally and select:
devassist-gatewayfrom the Jaeger service list.
Federated requests should contain spans from:
devassist-gateway
devassist-catalog
devassist-supportDiagnostic traces should include:
devassist-gateway
devassist-support
diagnostic.runOpenTelemetry Configuration
The default OTLP trace endpoint is:
http://localhost:4318/v1/tracesIt can be overridden with:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTFor example:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://telemetry-host:4318/v1/tracesEach backend service exports its own service.name.
This allows an observability platform to identify service boundaries while preserving shared distributed-trace context.
Example Diagnostic Flow
When a user runs diagnostics for the Checkout API:
React
|
v
Gateway
|
| x-request-id
| traceparent
|
v
Support
|
v
diagnostic.run
|
+-- DNS registration
+-- HTTP reachability
+-- Authentication configuration
+-- Dependency healthThe current demonstration data intentionally produces an authentication-related failure for Checkout while allowing the other checks to succeed.
This makes degraded behavior visible without depending on an external production system.
Example Federation Flow
The UI can request service information from one unified GraphQL API even though different domains own different parts of the data.
Conceptually:
query {
services {
id
name
owner
tier
health
dependencies {
id
name
health
}
incidents {
title
severity
status
}
runbooks {
title
}
}
}Apollo Gateway determines which subgraph owns each field and coordinates the downstream requests.
The client does not need to know which backend service owns the requested data.
Security Design
DevAssist is a development and portfolio project, but several production-oriented security practices are intentionally represented.
Authentication Boundary
External application access is routed through the Gateway.
No Arbitrary Shell Diagnostics
The diagnostic engine uses predefined deterministic checks instead of accepting arbitrary shell commands.
This reduces the risk of turning a support tool into a remote execution mechanism.
MCP Uses Existing Application Boundaries
MCP tooling communicates through DevAssist application interfaces rather than directly accessing internal service data.
Sensitive Log Redaction
Authorization headers, cookies, and related sensitive values are redacted from structured logs.
For example:
authorization: "[REDACTED]"rather than storing bearer tokens.
Environment-Based Configuration
Secrets and environment-specific settings should be provided through environment variables rather than committed source code.
The included local credentials are demonstration values only.
Cross-Platform Development
DevAssist is designed to work consistently across:
Windows
macOS
Linux
The repository includes .gitattributes to normalize source files to LF line endings:
* text=auto eol=lfWindows-native batch files may retain CRLF where appropriate.
An .editorconfig file also standardizes:
UTF-8 encoding
LF line endings
Final newlines
Trailing whitespace behavior
This prevents operating-system-specific line-ending changes from creating unnecessary Git diffs.
Development Philosophy
DevAssist is built around several principles.
Automate Repeated Support Work
If engineers repeatedly gather the same information before troubleshooting, that information should be easier to retrieve automatically.
Preserve Human Judgment
Diagnostics should provide evidence and context rather than pretending to replace engineering analysis.
Make Failure Observable
Troubleshooting becomes significantly easier when requests can be followed across service boundaries.
Prefer Safe Automation
Support tooling should use bounded, auditable operations rather than unrestricted remote execution.
Keep Service Boundaries Explicit
Catalog, support, diagnostics, and client interfaces are deliberately separated so the architecture can evolve without collapsing into one tightly coupled application.
Use AI Through Controlled Interfaces
AI tooling can consume DevAssist capabilities through MCP while remaining behind the same application boundaries used by other clients.
Testing
Run the available automated tests with:
npm testWhere applicable, individual workspace tests can also be run independently.
Before committing significant changes, the project should pass:
npm test
npm run build
git diff --checkProduction Considerations
DevAssist is currently a portfolio and development project rather than a production deployment.
A production implementation would likely introduce additional capabilities such as:
Persistent database storage
OAuth 2.0 / OpenID Connect
External identity-provider integration
Asymmetric JWT signing
Fine-grained authorization
Persistent incident integrations
Metrics
Centralized log aggregation
Production OpenTelemetry Collector infrastructure
Rate limiting
Audit logging
Secrets management
Service-level objectives
Deployment orchestration
Expanded diagnostic providers
The current architecture is intended to provide clean boundaries for those capabilities to be added incrementally.
Current Status
The current MVP includes:
React developer-support interface
Node.js Gateway
JWT authentication
Apollo Federation
Catalog GraphQL subgraph
Support GraphQL subgraph
REST diagnostics
Deterministic diagnostic engine
Service dependencies
Incidents
Runbooks
MCP integration
Structured Pino logging
Sensitive-log redaction
Cross-service request correlation
OpenTelemetry tracing
W3C trace-context propagation
Jaeger-compatible OTLP export
Cross-platform line-ending normalization
GitHub Actions
Architecture documentation
Future Work
Potential future improvements include:
Persistent service and incident storage
OAuth/OIDC authentication
Role-based authorization
OpenTelemetry metrics
Log/trace correlation enhancements
Diagnostic execution history
Additional diagnostic providers
Incident-system integrations
Service ownership integrations
More advanced dependency visualization
Expanded MCP capabilities
Streamable HTTP MCP transport
Production-ready deployment configuration
OpenTelemetry Collector support
Design Notes
More detailed architectural information is available in:
docs/ARCHITECTURE.mdLicense
This project is provided as a portfolio and demonstration project.
See the repository license for applicable usage terms.
This server cannot be deployed
Maintenance
Related MCP Connectors
Network, domain and website diagnostics for AI clients via MCP.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Four tools to check, watch, diagnose and verify AI agents and MCP servers. Free, read-only.
The Google GKE MCP server is a managed Model Context Protocol server that provides AI applications with tools to manage Google Kubernetes Engine (GKE) clusters and Kubernetes resources. It exposes a structured, discoverable interface that allows AI agents to interact with GKE and Kubernetes APIs, enabling them to inspect cluster configurations, retrieve Kubernetes resource YAMLs, monitor operations like cluster upgrades, diagnose issues, and optimize costs—all without needing to parse text output or use complex kubectl commands.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceEnables AI assistants to discover, retrieve details about, and manage MCP (Model Context Protocol) servers that provide additional tools and capabilities on demand.563 npm10-
- FlicenseNot gradedqualityCmaintenanceExposes DevOps/SRE operations like Kubernetes pod status, Prometheus metrics queries, and deploy history as tools for MCP-compatible clients.-
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to investigate production incidents by exposing service health, logs, and deployment data through MCP tools.15 npm-
- FlicenseCqualityBmaintenanceProvides a stable provider-neutral tool surface for AI-assisted engineering, enabling project intake, code review, debugging, testing, docs drift checks, release readiness, design review, and multi-provider verification via MCP.59-