Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,6 @@ npm/package.json

# Snyk Security Extension - AI Rules (auto-generated)
.cursor/rules/snyk_rules.mdc

# Generated documentation files
mcp-cfg-locations-by-client-and-os.csv
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: run test tests ci pre-commit clean binary build shiv publish-pypi publish reset-uv install-dev-server-cursor install-dev-server-windsurf
.PHONY: run test tests ci pre-commit clean binary build shiv publish-pypi publish reset-uv install-dev-server-cursor install-dev-server-windsurf generate-mcp-locations

# Pass extra arguments via ARGS, e.g.: make test ARGS="-v -k test_basic tests/e2e/"
ARGS ?=
Expand Down Expand Up @@ -67,3 +67,6 @@ install-dev-server-cursor:

install-dev-server-windsurf:
uv run --directory $PWD -m src.agent_scan.run install-mcp-server ~/.codeium/windsurf/mcp_config.json --background --tool --client-name Windsurf

generate-mcp-locations:
uv run python scripts/generate_mcp_config_locations.py
87 changes: 87 additions & 0 deletions scripts/generate_mcp_config_locations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#!/usr/bin/env python3
"""
Generate a CSV file listing all MCP configuration paths by client and OS.
"""
import csv
import sys
from pathlib import Path

# Add src to path to import agent_scan modules
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))

from agent_scan.well_known_clients import (
MACOS_WELL_KNOWN_CLIENTS,
LINUX_WELL_KNOWN_CLIENTS,
WINDOWS_WELL_KNOWN_CLIENTS,
)


def generate_csv(output_path: str) -> None:
"""Generate CSV file with MCP config locations and skills directories by client and OS."""
rows = []

# Process macOS clients
for client in MACOS_WELL_KNOWN_CLIENTS:
for path in client.mcp_config_paths:
rows.append({
"Client Name": client.name,
"OS": "macOS",
"Path Type": "MCP Config",
"Path": path,
})
for path in client.skills_dir_paths:
rows.append({
"Client Name": client.name,
"OS": "macOS",
"Path Type": "Skills Directory",
"Path": path,
})

# Process Linux clients
for client in LINUX_WELL_KNOWN_CLIENTS:
for path in client.mcp_config_paths:
rows.append({
"Client Name": client.name,
"OS": "Linux",
"Path Type": "MCP Config",
"Path": path,
})
for path in client.skills_dir_paths:
rows.append({
"Client Name": client.name,
"OS": "Linux",
"Path Type": "Skills Directory",
"Path": path,
})

# Process Windows clients
for client in WINDOWS_WELL_KNOWN_CLIENTS:
for path in client.mcp_config_paths:
rows.append({
"Client Name": client.name,
"OS": "Windows",
"Path Type": "MCP Config",
"Path": path,
})
for path in client.skills_dir_paths:
rows.append({
"Client Name": client.name,
"OS": "Windows",
"Path Type": "Skills Directory",
"Path": path,
})

# Write CSV file
with open(output_path, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["Client Name", "OS", "Path Type", "Path"])
writer.writeheader()
writer.writerows(rows)

print(f"Generated {output_path} with {len(rows)} entries")


if __name__ == "__main__":
# Generate CSV in the root of the repository
repo_root = Path(__file__).parent.parent
output_file = repo_root / "mcp-cfg-locations-by-client-and-os.csv"
generate_csv(str(output_file))
Loading
Loading