MCP Architector
Click on "Install 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., "@MCP Architectoradd module auth with dependencies on user-service"
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.
MCP Architector
Model Context Protocol (MCP) server for architecture and system design
Local-first MCP server that stores and manages project architecture information. All data is stored locally in ~/.mcp-architector for maximum privacy and confidentiality.
π¦ Install: npm install -g mcp-architector or use via npx
π npm: https://www.npmjs.com/package/mcp-architector
π GitHub: https://github.com/theSharque/mcp-architect
How to connect to Claude Desktop / IDE
Add the server to your MCP config. Example for claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"architector": {
"command": "npx",
"args": ["-y", "mcp-architector"],
"env": {
"MCP_PROJECT_ID": "${workspaceFolder}"
}
}
}
}For Cursor IDE: Settings β Features β Model Context Protocol β Edit Config, then add the same block inside mcpServers. See the Integration section for more options.
Related MCP server: LocalNest MCP
Cursor rule (recommended)
For Cursor IDE and Cursor Cloud Agents, use a phased onboarding rule so the agent does not dump the whole repo into context in one shot.
Copy
.cursor/rules/architector-onboarding.mdcinto your project (the repo you are documenting):mkdir -p /path/to/your-app/.cursor/rules cp /path/to/mcp-architector/.cursor/rules/architector-onboarding.mdc /path/to/your-app/.cursor/rules/Ensure MCP Architector is configured with
MCP_PROJECT_IDpointing at that workspace (see How to connect).Ask in chat, for example: "Onboard this repo into architector β phase 0 plan first" or "Import architecture module by module".
The rule is alwaysApply: false β Cursor attaches it when the task matches architecture import/onboarding. It enforces: structure β one module per step β validate after each step β compact tools only.
If you develop this server repo, keep the same file here so contributors and Cloud Agents follow the same workflow when updating ~/.mcp-architector/_qs_mcp-architector/.
Overview
Store and manage project architecture, modules, scripts, data flow, and usage examples - all locally with complete privacy.
Features
Local Storage: All data stored in
~/.mcp-architector(privacy-first)Project Architecture: Store and retrieve overall project architecture
Module Details: Detailed information about each module
Resources: Access architecture data via resources
Storage Structure
~/.mcp-architector/
βββ {projectId}/
βββ architecture.json # Modules + dataFlow (vertical structure)
βββ modules/
β βββ {moduleId}.json
β βββ ...
βββ entries/
β βββ index.json # Catalog (no duplicate bodies)
β βββ {entryId}.json # Canonical facts (API, domain, flows, β¦)
βββ slices/
β βββ {sliceId}.json # Custom filters only (no items)Data model
Layer | Purpose | Tools |
Modules | Vertical structure: components, dependencies, dataFlow |
|
Entries | Single source of truth for horizontal facts (one fact = one file) |
|
Slices | Read-only views over entries (built-in or custom filters) |
|
Anti-patterns (no duplication): Do not copy module.description into entry.summary. Link with refs.moduleName. Slices never store item copiesβonly filters in slices/*.json.
Do not edit ~/.mcp-architector directly β always use MCP tools so timestamps, merge semantics, and dataFlow inverse sync stay consistent.
Agent workflow
list-projectsβ confirmprojectIdif data looks empty or wrong.Structure task β
get-project-architecture/set-project-architecture.Each module β
set-module-detailswithfiles+facts[](endpoints, entities, glossary) in the same call, orset-entries/set-entrywithrefs.moduleName.Single module graph edge β
set-module-data-flow.Bulk rebuild flow (many modules) β
rebuild-data-flow.After edits, verify everything β
validate(summary +issues[]; no full project load).Need a category (all APIs, all domain terms) β
list-slicesβget-slicewithformat=compactortable; useoffsetwhenhasMoreis true.Find by name β
search-entriesβget-entryfor full payload.After code refactor (same modules) β
refactor-architecture:scanβ dryRun preview β apply withconfirm=true.
Scenario | Tool |
Update one module + its APIs/facts |
|
Bulk facts for a domain |
|
Patch dataFlow for one module |
|
Rebuild all module edges |
|
Diagnose graph + empty slices |
|
Sync paths/names after refactor |
|
Index out of sync |
|
Create project from scratch |
|
Onboard a fresh git clone (phased) | Copy |
Full project picture: modules alone do not populate slices β without http-endpoint (and other kinds) entries, slice api stays empty. New module β add facts or entries in the same step.
Example: set-module-details with facts: [{ kind: "http-endpoint", title: "POST /orders", ... }], then get-slice sliceId=api format=table.
Quick Start
For Users (using npm package)
# No installation needed - use directly in Cursor/Claude Desktop
# Just configure it as described in Integration section belowFor Developers
Clone the repository:
git clone https://github.com/theSharque/mcp-architect.git
cd mcp-architectInstall dependencies:
npm installBuild the project:
npm run buildUsage
Development Mode
Run with hot reload:
npm run devProduction Mode
Start the server:
npm startMCP Inspector
Debug and test your server with the MCP Inspector:
npm run inspectorIntegration
Cursor IDE
Open Cursor Settings β Features β Model Context Protocol
Click "Edit Config" button
Add one of the configurations below
Option 1: Via npm (Recommended)
Installs from npm registry automatically:
{
"mcpServers": {
"architector": {
"command": "npx",
"args": ["-y", "mcp-architector"],
"env": {
"MCP_PROJECT_ID": "${workspaceFolder}"
}
}
}
}Option 2: Via npm link (Development)
For local development with live changes:
{
"mcpServers": {
"architector": {
"command": "mcp-architector",
"env": {
"MCP_PROJECT_ID": "${workspaceFolder}"
}
}
}
}Requires: cd /path/to/mcp-architector && npm link -g
Option 3: Direct path
{
"mcpServers": {
"architector": {
"command": "node",
"args": ["/path/to/mcp-architector/dist/index.js"],
"env": {
"MCP_PROJECT_ID": "${workspaceFolder}"
}
}
}
}Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"architector": {
"command": "npx",
"args": ["-y", "mcp-architector"],
"env": {
"MCP_PROJECT_ID": "${workspaceFolder}"
}
}
}
}Continue.dev
Edit .continue/config.json:
{
"mcpServers": {
"architector": {
"command": "npx",
"args": ["-y", "mcp-architector"],
"env": {
"MCP_PROJECT_ID": "${workspaceFolder}"
}
}
}
}Using Project ID
When calling tools, you can:
Use automatic project ID (from
${workspaceFolder}env var): Just omit theprojectIdparameterOverride per call: Pass
projectIdexplicitly in the tool callUse default: If neither is provided, uses "default-project"
Tools
set-project-architecture
Creates or updates the overall architecture for a project. By default merges modules and dataFlow by name; omit dataFlow to preserve existing flow. dependsOn is canonical; providesTo is recomputed on save.
Input:
projectId(optional): Project ID (defaults to "default-project")description: Overall project descriptionmodules: Array of module objects with:name: Module namedescription: Brief description of the moduleinputs(optional): What this module requires to workoutputs(optional): What this module produces or generates
dataFlow(optional): Object describing data flow between modules (omit to keep existing):Key: module name
Value: object with:
dependsOn(optional): Array of module names this module depends onprovidesTo(optional): Derived on save from alldependsOnedgesdataTransformation(optional): How data is transformed between modules
replaceModules(optional): Replace entire modules list (defaultfalse= merge by name)replaceDataFlow(optional): Replace entire dataFlow (defaultfalse= merge by module name)
Output:
Project ID and success message
get-project-architecture
Retrieves the overall architecture of the project.
Input:
projectId(optional): Project ID (defaults to "default-project")
Output:
Complete project architecture
list-projects
Lists all projects in local storage (~/.mcp-architector). Use when the workspace may map to a different normalized projectId.
Input:
query(optional): Filter by substring in projectId or description (case-insensitive)
Output:
Array of project summaries:
projectId,description,moduleCount,updatedAt,isCurrent(matches currentMCP_PROJECT_ID)
Entries and slices
Tool | Purpose |
| Upsert one fact; response may include |
| Bulk upsert (max 200); optional |
| Full entry by |
| Remove entry |
| Catalog without payload; filter by |
| Compact text search with |
| Built-in + custom slices with entry counts |
| Filtered view: |
| Save custom filter ( |
| Remove custom slice |
| Rebuild |
Built-in sliceId values: api, persistence, events, domain, flows, integrations, config, runtime, decisions, scripts.
search-entries
Compact navigation searchβreturns enough context to pick a hit, then call get-entry for full payload.
Input: query (required), moduleName, kind, tags, limit (default 10, max 50), offset (default 0)
Output: summary, total, returned, offset, hasMore, results[] with snippet, matchedIn, slices, moduleName plus legacy summary, tags, refs
Recommended kind examples (any string allowed):
sliceId | kinds |
api |
|
persistence |
|
domain |
|
scripts |
|
set-module-details
Creates or updates detailed information about a module. Slices read entries, not module text β pass facts[] to create linked entries in one call.
Input:
projectId(optional): Project IDname: Module namedescription: Detailed description of the moduleinputs: What the module accepts as inputoutputs: What the module produces as outputdependencies(optional): List of module dependencies (syncs todataFlow.dependsOnwhen provided)files(optional): List of files belonging to this modulefacts(optional): Array of horizontal facts (kind,title,summary, β¦) β each upserted as entry withrefs.moduleName= module nameusageExamples(optional): Array of usage examples with fields:title: Example titledescription(optional): Description of the examplecommand(optional): Command or code snippetinput(optional): Input dataoutput(optional): Expected outputnotes(optional): Additional notes about the example
notes(optional): Additional notes
Output:
Module ID and success message
set-module-data-flow
Patches dataFlow for a single module without sending the full architecture.
Input:
projectId(optional): Project IDmoduleName: Module namedependsOn(optional): Modules this module depends on (canonical)dataTransformation(optional): How data is transformedsyncInverse(optional): RecomputeprovidesTo(defaulttrue)
Output:
Module name and success message
rebuild-data-flow
Rebuilds dataFlow for all modules from module file dependencies or existing dependsOn edges. Replaces bulk manual edits to architecture.json.
Input:
projectId(optional): Project IDsource(optional):module-dependencies(default) ordataFlow-dependsOnsyncInverse(optional): RecomputeprovidesTo(defaulttrue)pruneOrphans(optional): Remove invalid module references (defaulttrue)
Output:
edgesAdded,edgesRemoved,modulesUpdated, message
validate
Primary post-edit check. Read-only validation with a compact agent-friendly report. Does not modify data.
Checks (only rules we can verify from stored JSON):
dataFlow: inverse drift, dangling
dependsOn/providesTo, orphan flow keysmodule.dependenciesvsdataFlow.dependsOnentries:
entries-without-modules,entry-unlinked,orphan-entry-module,module-no-entries,module-missing-api/module-missing-persistence,entry-slice-orphan,module-too-many-entries,module-too-few-entriesstorage: missing
modules/{id}.json, orphan module files, entry index driftslices: empty built-in
api/domain/persistencewhen modules exist
Input: projectId, checkInverse, checkModuleDeps, checkEntryCoverage, checkStorage, checkEmptySlices, checkSliceCoverage, checkModuleEntryCounts, moduleEntryMax (default 50), moduleEntryMin (optional; omit to disable min check) β all boolean flags default true unless noted
Output: valid, issueCount, summary, stats, issuesByKind, issues[], coverage, checksRun
refactor-architecture
Preview or apply in-architector sync after a code refactor when module boundaries stay the same. Agent is the source of truth β no workspace or git access. Default dryRun=true.
Workflow: (1) scan with file or text β compact hits, (2) build mutation ops, (3) dryRun preview, (4) apply with dryRun=false and confirm=true.
Operations (max 10 per call): scan, move-file, replace-path-prefix, rename-text, patch-entry, merge-files, remove-file-ref.
Scope (optional): moduleName, kinds, tags β limits which entries/modules are touched.
Orphan entries with empty refs.files and no refs.entryIds are deleted after file operations.
Input: projectId, operations[], scope, dryRun (default true), confirm (required when applying), limit, offset
Output: summary, stats, hits (scan) or paginated changes, warnings, hasMore
validate-architecture
Same as validate (legacy alias). Prefer validate after edits.
Output:
valid(boolean),issuesarray
get-module-details
Retrieves detailed information about a specific module.
Input:
projectId(optional): Project IDmoduleName: Name of the module to retrieve
Output:
Complete module details
list-modules
Lists all modules in the project architecture.
Input:
projectId(optional): Project ID
Output:
Array of module summaries
delete-module
Deletes a module from the project architecture.
Input:
projectId(optional): Project IDmoduleName: Name of the module to delete
Output:
Success message
Resources
architecture
Provides access to project architecture as a resource.
Usage:
Access via URI: arch://{projectId}
module
Provides access to module details as a resource.
Usage:
Access via URI: module://{projectId}/{moduleId}
Development
Project Structure
mcp-architector/
βββ src/
β βββ index.ts # Main server implementation
β βββ types.ts # Type definitions
β βββ storage.ts # Storage utilities
βββ dist/ # Compiled output (generated)
βββ package.json
βββ tsconfig.json
βββ README.mdProject ID and Workdir
The server uses projectId to organize data in separate directories. The priority for determining project ID is:
Explicitly passed in tool call parameters (highest priority)
From environment variable
MCP_PROJECT_ID(set during initialization)Default fallback "default-project" (lowest priority)
For Cursor integration, set MCP_PROJECT_ID to use the workspace directory automatically as the project ID.
Extending the Server
To add new tools, resources, or prompts, edit src/index.ts:
// Add a tool
server.registerTool(
"tool-name",
{ /* tool config */ },
async (params) => { /* handler */ }
);
// Add a resource
server.registerResource(
"resource-name",
new ResourceTemplate("uri-template", { /* options */ }),
{ /* resource config */ },
async (uri, params) => { /* handler */ }
);
// Add a prompt
server.registerPrompt(
"prompt-name",
{ /* prompt config */ },
(args) => { /* handler */ }
);License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/theSharque/mcp-architect'
If you have feedback or need assistance with the MCP directory API, please join our Discord server