notion-archive-container-mcp
Notion Dev Containers MCP - Agent Instructions
This document provides comprehensive guidance for AI agents on how to use the Notion Dev Containers MCP (Model Context Protocol) server effectively.
Overview
The notion-dev-containers MCP server provides tools for managing containerized Notion services running via Podman/Docker. It enables agents to:
- Monitor container status and health
- View and search container logs
- Start, stop, and restart services
- Execute commands inside containers
- Manage the entire container stack
Available Services
The MCP server manages the following containerized services:
| Service | Container Name | Port | Description |
|---|---|---|---|
polling |
notion-polling | 8080 | Polls Notion API for changes, syncs to MSSQL |
api |
notion-api | 8000 | FastAPI REST service for write operations |
archival-grpc |
notion-archival-grpc | 50051 (gRPC) | gRPC server for archival operations |
notion-sync |
notion-sync | 50054 (gRPC) | Queue worker for sync operations |
notion-jit |
notion-jit | 50055 (gRPC) | JIT (Just-In-Time) refresh service |
gateway |
gateway | 8000 | FastAPI gateway service |
nginx-gateway |
nginx-gateway | 80 | Nginx reverse proxy |
redis |
notion-redis | 6379 | Redis cache for gateway |
stonepro-service |
stonepro-service | 8080 | StonePro ERP integration |
Tool Reference
1. Monitoring & Status Tools
list_services
Lists all services and their current status at a glance.
Parameters: None
Use when: You need a quick overview of which containers are running, stopped, or have errors.
Example output:
# Notion Container Services Status
## 🟢 Running
- **polling** (notion-polling): ✅ healthy
- **api** (notion-api): ✅ healthy
## 🔴 Stopped
- **redis** (notion-redis): exited
## ⚪ Not Found
- **gateway** (gateway): container not created
service_status
Get detailed status for a specific service including health, ports, and resource usage.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name (see Available Services table) |
Use when: You need deep diagnostic info about a specific service—its health state, uptime, port mappings, and CPU/memory usage.
health_check_all
Run health checks on all services and return a summary.
Parameters: None
Use when: You want to quickly determine the overall health of the container stack without needing port or resource details.
Example output:
# Health Check Summary
**Summary:** 5 healthy, 2 unhealthy, 2 unknown
🟢 **polling**: healthy
🟢 **api**: healthy
🔴 **redis**: stopped
⚪ **gateway**: not deployed
get_resource_usage
Get CPU and memory usage for a specific service.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name |
Use when: You need to check if a service is consuming excessive resources or to diagnose performance issues.
Example output:
# Resource Usage: polling
- **CPU:** 2.34%
- **Memory:** 156.2MiB / 2GiB (7.62%)
- **Network I/O:** 1.2MB / 456KB
- **Block I/O:** 12MB / 4MB
2. Log Tools
get_logs
Get logs from a container service with optional filtering.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
service |
string | ✅ | - | Service name |
lines |
integer | ❌ | 100 | Number of log lines to retrieve |
filter |
string | ❌ | - | Regex pattern to filter logs |
since |
string | ❌ | - | Show logs since timestamp (e.g., 10m, 1h, 2024-01-01) |
Use when: You need to inspect logs from a specific service, especially when debugging issues.
Best practices:
- Start with
lines: 50for quick checks - Use
filterwith regex like"error|exception|failed"to find problems - Use
since: "10m"to focus on recent activity
search_logs
Search logs across multiple services for a pattern.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
pattern |
string | ✅ | - | Regex pattern to search for |
services |
array | ❌ | all | List of services to search |
lines |
integer | ❌ | 500 | Lines to search per service |
Use when: You need to find occurrences of errors, warnings, or specific events across the entire stack.
Example patterns:
"error|exception"- Find all errors"request.*failed"- Find failed requests"notion.*api"- Find Notion API related logs"status.*5[0-9]{2}"- Find HTTP 5xx errors
3. Service Control Tools
start_service
Start a stopped container service.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name to start |
Use when: A service is stopped and needs to be started.
stop_service
Stop a running container service.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name to stop |
Use when: You need to gracefully stop a service (e.g., before maintenance or to free resources).
restart_service
Restart a container service.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name to restart |
Use when: A service is behaving unexpectedly and needs a fresh start, or after configuration changes.
rebuild_service
Rebuild a service's container image.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
service |
string | ✅ | - | Service name to rebuild |
no_cache |
boolean | ❌ | false | Build without using cache |
Use when: Code changes have been made and the container image needs to be rebuilt. Use no_cache: true if you suspect caching issues.
⚠️ Note: Rebuilding takes time. The service will be unavailable during the rebuild.
4. Compose Management Tools
compose_up
Start all services using podman-compose.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
detach |
boolean | ❌ | true | Run in detached mode |
Use when: You need to bring up the entire container stack at once.
compose_down
Stop and remove all containers.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
volumes |
boolean | ❌ | false | Also remove volumes |
Use when: You need to tear down the entire stack. Use volumes: true only if you want to clear all persisted data.
⚠️ Caution: Using volumes: true will delete all data in container volumes!
5. Container Interaction Tools
exec_command
Execute a command inside a running container.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name |
command |
string | ✅ | Shell command to execute |
Use when: You need to run diagnostic commands, check file contents, or interact with the container's internal environment.
Example commands:
ls -la /app- List application filescat /app/config.py- View configurationpip list- List installed Python packagesenv | grep NOTION- Check Notion-related env varsps aux- View running processesdf -h- Check disk usage
get_env
Get environment variables from a running container (sensitive values are masked).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name |
Use when: You need to verify environment configuration. Note that values containing "password", "secret", "key", or "token" are automatically masked for security.
get_ports
Get port mappings for a service.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
service |
string | ✅ | Service name |
Use when: You need to know which host ports are mapped to a container's internal ports.
Common Workflows
Debugging a Service Issue
-
Check overall status:
list_services -
Get detailed status for the problematic service:
service_status(service: "polling") -
Check recent logs for errors:
get_logs(service: "polling", lines: 100, filter: "error|exception|failed") -
If needed, restart the service:
restart_service(service: "polling")
Finding Errors Across All Services
-
Search all logs for errors:
search_logs(pattern: "error|exception|traceback", lines: 500) -
Narrow down to specific services if needed:
search_logs(pattern: "connection refused", services: ["api", "gateway"])
Deploying Code Changes
-
Rebuild the affected service:
rebuild_service(service: "api", no_cache: false) -
Restart to pick up changes:
restart_service(service: "api") -
Verify it's healthy:
service_status(service: "api")
Starting Fresh
-
Tear everything down:
compose_down(volumes: false) -
Bring everything up:
compose_up(detach: true) -
Verify health:
health_check_all
Investigating Resource Issues
-
Check resource usage:
get_resource_usage(service: "archival-grpc") -
If high CPU, check what's running:
exec_command(service: "archival-grpc", command: "ps aux | head -20")
Error Handling
Container Runtime Unavailable
If you see "Container runtime unavailable" or similar errors:
-
On Windows: The Podman VM may not be running. The user needs to run:
podman machine start -
Check if Podman is installed: The runtime might not be installed at all.
Service Not Found
If a service shows as "not found":
- The container hasn't been created yet
- Run
compose_upto create all containers
Compose Command Failures
If compose commands fail with "command not found":
podman-composemay not be installed- The user can either install it (
pip install podman-compose) or setCOMPOSE_CMD=podman compose
Environment Variables
The MCP server behavior can be customized via environment variables:
| Variable | Default | Description |
|---|---|---|
CONTAINER_RUNTIME |
podman |
Container runtime (podman or docker) |
COMPOSE_CMD |
podman compose (Windows) / podman-compose (Linux) |
Compose command |
COMPOSE_FILE |
podman-compose.yml |
Compose file name |
MCP_CONTAINER_CMD_TIMEOUT |
10 |
Timeout for container commands (seconds) |
MCP_COMPOSE_TIMEOUT |
120 |
Timeout for compose commands (seconds) |
Best Practices for Agents
-
Always start with
list_servicesorhealth_check_allto understand the current state before taking action. -
Use filtered log queries instead of fetching thousands of lines—be specific with regex patterns.
-
Check status after actions - After starting, stopping, or restarting a service, verify with
service_status. -
Be cautious with
compose_down(volumes: true)- This deletes all persistent data. -
Use
search_logsfor cross-service debugging - It's more efficient than checking each service individually. -
Mask sensitive data - The
get_envtool masks passwords automatically, but be careful when usingexec_commandwith commands that might expose secrets. -
Timeouts - Compose operations can take time (up to 120 seconds). Be patient with
compose_upandrebuild_service.
Quick Reference Card
| Task | Tool | Key Parameters |
|---|---|---|
| See all service states | list_services |
- |
| Deep-dive one service | service_status |
service |
| Quick health check | health_check_all |
- |
| View logs | get_logs |
service, lines, filter |
| Search all logs | search_logs |
pattern, services |
| Start service | start_service |
service |
| Stop service | stop_service |
service |
| Restart service | restart_service |
service |
| Rebuild image | rebuild_service |
service, no_cache |
| Run command in container | exec_command |
service, command |
| Check env vars | get_env |
service |
| Check ports | get_ports |
service |
| Check resources | get_resource_usage |
service |
| Start all services | compose_up |
detach |
| Stop all services | compose_down |
volumes |
More from ds-codi/project-memory-mcp
pyside6-mvc
Use this skill when building Python desktop applications using PySide6 with strict MVC architecture where all UI is defined by .ui files. Covers architecture patterns, controller/model/view separation, signal handling, and .ui file workflows.
95pyside6-qml-views
Use this skill when creating QML view files, designing QML component hierarchies, building layouts, styling QML controls, creating reusable QML components, implementing QML navigation / page switching, or working with QML resources. Covers QML file structure, component patterns, Material/Controls styling, resource management, and common QML idioms for desktop applications.
49pyside6-qml-architecture
Use this skill when creating a new PySide6 + QML desktop application with MVC architecture, setting up project structure, implementing the application bootstrap / DI container, or understanding how the MVC layers connect. Covers project scaffolding, entry points, singleton application class, service locator, signal registry, and lifecycle management.
47mvc-architecture
Use this skill when implementing Model-View-Controller architecture. Covers core MVC principles, layer separation, dependency injection, event-driven communication, and patterns for controllers, models, and views.
40pyside6-qml-models-services
Use this skill when creating domain models with Qt signal support, implementing the repository pattern for data persistence, building service classes for external interactions, designing the central signal registry, or working with application state management. Covers BaseModel, model serialization, database repositories, service patterns, signal definitions, and the ApplicationState singleton.
34pyside6-qml-bridge
Use this skill when exposing Python objects to QML, creating bridge classes, defining Qt properties with NOTIFY signals, implementing invokable methods / slots, or connecting QML user actions to Python controllers. Covers the QObject bridge pattern, property decorators, type conversions, context properties, and QML type registration.
32