.vscode — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited .vscode (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
⚠️ WORK IN PROGRESS: This project is under active development. APIs, components, and configurations may change significantly. Use at your own risk in production environments.
A comprehensive TypeScript ecosystem for building AI-powered applications with support for multiple providers, MCP protocol, and flexible configuration management.
Problem: Building AI applications requires dealing with different provider APIs, complex configuration management, and protocol translations for MCP clients. Solution: This monorepo provides a modular ecosystem with clean separation of concerns:
┌─────────────────────────────────────────────────────────────────┐
│ MCP Clients (Claude Desktop, Windsurf, Cursor) │
└─────────────────────────────────────────────────────────────────┘
↓ ↓
┌───────────────────────────┐ ┌─────────────────────────┐
│ @anygpt/mcp-discovery-server │ │ @anygpt/mcp │
│ (5 meta-tools, 99% token │ │ (MCP protocol server) │
│ reduction) │ └─────────────────────────┘
└───────────────────────────┘ ↓
↓ ┌─────────────────┐
┌───────────────────────┐ │ @anygpt/config │
│ @anygpt/mcp-discovery │ │ (Configuration) │
│ (Discovery engine) │ └─────────────────┘
└───────────────────────┘ ↓
┌─────────────────┐
┌─────────────────────────┐ │ @anygpt/router │
│ @anygpt/cli │────────────→│ (Provider │
│ (Command-line tool) │ │ abstraction) │
└─────────────────────────┘ └─────────────────┘
↓
┌───────────────────────┐
│ @anygpt/ai-provider │
│ (Function calling) │
└───────────────────────┘
↓
┌───────────────────────────────────────┐
│ Connectors (@anygpt/openai, │
│ @anygpt/anthropic, @anygpt/cody, │
│ @anygpt/claude, @anygpt/mock) │
└───────────────────────────────────────┘
↓
┌───────────────────────────────────────┐
│ AI Provider APIs (OpenAI, Anthropic, │
│ Ollama, LocalAI, etc.) │
└───────────────────────────────────────┘
Supporting Packages:
• @anygpt/types - Pure type definitions (0 runtime deps)
• @anygpt/rules - Type-safe rule engine for configuration
• @anygpt/mcp-logger - File-based logging for MCP servers
• @anygpt/plugins - Plugin system (docker-mcp-plugin, etc.)| Package | Purpose | Dependencies |
|---|---|---|
| [@anygpt/types](./packages/types/) | Pure type definitions | None (0 runtime deps) |
| [@anygpt/config](./packages/config/) | Configuration management | @anygpt/types |
| [@anygpt/router](./packages/router/) | Core routing and connector registry | None |
| [@anygpt/ai-provider](./packages/ai-provider/) | AI provider wrapper with function calling | @anygpt/router |
| [@anygpt/rules](./packages/rules/) | Type-safe rule engine | None |
| [@anygpt/mcp-logger](./packages/mcp-logger/) | File-based logging for MCP servers | None |
| [@anygpt/plugins](./packages/plugins/) | Plugin system for dynamic configuration | @anygpt/types |
| [@anygpt/mcp-discovery](./packages/mcp-discovery/) | MCP tool discovery engine (core logic) | @anygpt/types |
| [@anygpt/mcp-discovery-server](./packages/mcp-discovery-server/) | MCP Discovery Server (PRIMARY interface) | @anygpt/mcp-discovery |
| [@anygpt/cli](./packages/cli/) | Command-line interface | @anygpt/config |
| [@anygpt/mcp](./packages/mcp/) | MCP server implementation | @anygpt/config |
| Package | Provider | Dependencies |
|---|---|---|
| [@anygpt/openai](./packages/connectors/openai/) | OpenAI & compatible APIs | @anygpt/router, openai |
| [@anygpt/anthropic](./packages/connectors/anthropic/) | Anthropic Claude (native) | @anygpt/router, @anthropic-ai/sdk |
| [@anygpt/claude](./packages/connectors/claude/) | Claude via MCP | @anygpt/router |
| [@anygpt/cody](./packages/connectors/cody/) | Sourcegraph Cody | @anygpt/router |
| [@anygpt/mock](./packages/connectors/mock/) | Testing & development | @anygpt/types |
npm install -g @anygpt/cli# For building applications
npm install @anygpt/router @anygpt/openai @anygpt/anthropic
# For configuration management
npm install @anygpt/config
# For type definitions only
npm install @anygpt/typesZero-configuration MCP server that enables AI agents to discover and execute tools from 100+ MCP servers without loading everything into context.
# No installation needed - use with npx
npx -y @anygpt/mcp-discovery-serverAdd to Claude Desktop / Windsurf / Cursor:
{
"mcpServers": {
"anygpt-discovery": {
"command": "npx",
"args": ["-y", "@anygpt/mcp-discovery-server"]
}
}
}What it does:
search_toolsExample workflow:
User: "Read README.md and create a GitHub issue if there are TODOs"
AI Agent:
1. search_tools({ query: "read file" }) → finds filesystem:read_file
2. execute_tool({ server: "filesystem", tool: "read_file", ... })
3. search_tools({ query: "create github issue" }) → finds github:create_issue
4. execute_tool({ server: "github", tool: "create_issue", ... })
Result: ~1,000 tokens vs 500,000+ tokens (99.8% savings)# Install and run MCP server
npm install -g @anygpt/mcp
anygpt-mcp#### AI Chat Commands
# Discover available models and tags
anygpt list-tags
# Quick chat with tags (stateless)
anygpt chat --tag sonnet "Explain TypeScript generics"
anygpt chat --tag opus "Write a complex algorithm"
# Specify provider explicitly
anygpt chat --provider cody --tag sonnet "Hello"
anygpt chat --provider provider1 --tag gemini "Hello"
# Use direct model name (no tag resolution)
anygpt chat --model "ml-asset:static-model/claude-sonnet-4-5" "Hello"
# Start a conversation (stateful)
anygpt conversation start --tag sonnet --name "coding-session"
anygpt conversation message "How do I implement a binary tree in TypeScript?"
anygpt conversation message "Show me the insertion method"
# List conversations
anygpt conversation list
# Fork a conversation with different tag
anygpt conversation fork --tag opus --name "binary-tree-v2"#### MCP Management Commands
# List all MCP servers
anygpt mcp list
anygpt mcp list --enabled # Only enabled servers
anygpt mcp list --disabled # Only disabled servers
# Search for tools across all servers
anygpt mcp search "github"
anygpt mcp search "create" --server github-official
# Inspect tool details (auto-resolves server)
anygpt mcp inspect search
anygpt mcp inspect create_issue --server github-official
# Execute tools with natural syntax
anygpt mcp execute search "how to cook paella"
anygpt mcp execute search "query" 5 # Multiple parameters
# List tools from specific server
anygpt mcp tools github-official
anygpt mcp tools github-official --all # Include disabled toolsimport { GenAIRouter } from '@anygpt/router';
import { OpenAIConnectorFactory } from '@anygpt/openai';
// Create router and register connector
const router = new GenAIRouter();
router.registerConnector(new OpenAIConnectorFactory());
// Create connector instance
const connector = router.createConnector('openai', {
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.openai.com/v1',
});
// Make requests
const response = await connector.chatCompletion({
model: 'gpt-4o',
messages: [{ role: 'user', content: 'Hello!' }],
});Auto-discover and configure Docker MCP servers:
// anygpt.config.ts
import { defineConfig } from '@anygpt/config';
import DockerMCP from '@anygpt/docker-mcp-plugin';
export default defineConfig({
plugins: [
DockerMCP({
serverRules: [
// Disable specific servers
{
when: { name: 'sequentialthinking' },
set: { enabled: false },
},
],
}),
],
});What it does:
Generated configuration:
{
mcpServers: {
'github-official': {
command: 'docker',
args: ['mcp', 'gateway', 'run', '--servers', 'github-official'],
source: 'docker-mcp-plugin',
metadata: { toolCount: 49 }
},
'duckduckgo': {
command: 'docker',
args: ['mcp', 'gateway', 'run', '--servers', 'duckduckgo'],
source: 'docker-mcp-plugin',
metadata: { toolCount: 2 }
}
}
}import { setupRouter } from '@anygpt/config';
// Automatically loads config and sets up router
const { router, config } = await setupRouter();
// Use with any registered connector
const response = await router.chatCompletion({
provider: 'openai-main',
model: 'gpt-4o',
messages: [{ role: 'user', content: 'Hello!' }],
});Factory config example (`.anygpt/anygpt.config.ts`):
import { config } from '@anygpt/config';
import { openai } from '@anygpt/openai';
import { anthropic } from '@anygpt/anthropic';
export default config({
defaults: {
provider: 'openai-main',
model: 'gpt-4o',
},
providers: {
'openai-main': {
name: 'OpenAI GPT Models',
connector: openai({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.openai.com/v1',
}),
},
claude: {
name: 'Anthropic Claude',
connector: anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
baseURL: 'https://api.anthropic.com', // Optional: for corporate gateways
}),
},
'ollama-local': {
name: 'Local Ollama',
connector: openai({
baseURL: 'http://localhost:11434/v1',
}),
},
},
});Alternative standard config format:
import type { AnyGPTConfig } from '@anygpt/config';
const config: AnyGPTConfig = {
version: '1.0',
providers: {
'openai-main': {
name: 'OpenAI GPT Models',
connector: {
connector: '@anygpt/openai',
config: {
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.openai.com/v1',
},
},
},
},
settings: {
defaultProvider: 'openai-main',
timeout: 30000,
},
};
export default config;# Run MCP server
anygpt-mcp
# Test with MCP Inspector
npx @modelcontextprotocol/inspector anygpt-mcpClaude Desktop Integration:
{
"mcpServers": {
"anygpt": {
"command": "anygpt-mcp",
"env": {
"OPENAI_API_KEY": "your-openai-api-key"
}
}
}
}This project uses NX monorepo for managing multiple packages:
# Install dependencies (automatically installs Husky git hooks)
npm install
# Note: package-lock.json is created locally but never committed
# - Nx requires it for builds
# - Husky pre-commit hook auto-unstages it
# - You can use any npm registry (public or internal)
# Build all packages (NX handles dependencies automatically)
npx nx run-many -t build
# Build specific package (dependencies built automatically)
npx nx build cli
# Run tests
npx nx run-many -t test
# Run E2E tests
npx nx e2e e2e-cli
# Lint all packages
npx nx run-many -t lint@anygpt/types (no deps)
↓
@anygpt/config, @anygpt/mock
↓
@anygpt/router → @anygpt/openai
↓
@anygpt/cli, @anygpt/mcpimport typeCore Packages:
MCP & Discovery:
Connectors:
CLI:
⚠️ Important: This project handles sensitive credentials. Please review SECURITY.md before contributing.
Key security practices:
.windsurf/workflows/security-check.md)example.com) instead of internal URLsMIT License - see LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.