Skip to main content
Glama
carlformigoni

claude-context-server

claude-context-server

An MCP server that exposes everything Claude Code knows about your projects — memories, instructions, custom skills, tech stack, and git history — as queryable tools. Lets any Claude instance, in any project or via Claude.ai, access your full context across every project you've ever worked on.

The problem it solves

Claude Code is powerful but siloed. Everything it learns — saved memories, project instructions, custom skills you've built — is locked to the project it was created in. Claude in a new project starts with no knowledge of what was decided, fixed, or built before. Claude.ai on web or phone can't see any of it.

This server bridges that gap. It reads across all your projects and exposes:

  • Memories — decisions, lessons, and conventions Claude Code has saved over time

  • CLAUDE.md instructions — your project-specific rules and context

  • Custom skills — slash commands you've built, available to replicate in new projects

  • Tech stack — detected automatically from manifest files

  • Git history — recent commits so Claude knows what's been worked on

All of it queryable from any Claude instance, any project, any device.

Related MCP server: Cortex

Installation

Claude Code (CLI / VS Code)

claude mcp add --scope user claude-context-server -- npx -y claude-context-server

That's it. The server is now available in every project automatically. Verify with:

claude mcp list

Claude Desktop app (Mac/Windows)

Add to your Claude Desktop config file:

  • Mac: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "claude-context-server": {
      "command": "npx",
      "args": ["-y", "claude-context-server"]
    }
  }
}

Restart the Claude Desktop app.

Tools

Tool

Description

list_projects

All projects with memory files, decoded paths, and entry counts

get_project(project_name)

Full memory dump for a named project — plus CLAUDE.md, custom skills, tech stack, and recent git history

get_user_profile

All type: user memory entries aggregated into one profile

get_all_feedback

All type: feedback entries aggregated — lessons and conventions across every project

search(query)

Full-text search across all memory files with project context

get_all_context

Everything in one markdown document — use this for Claude.ai uploads

save_memory(...)

Write a new memory file to any project's memory directory from any Claude instance

Export for Claude.ai

Claude.ai can't run local MCP servers, but you can give it a snapshot:

npx claude-context-server export

This writes ~/claude-context-export.md. Upload it to a Claude.ai Project as a knowledge file — every chat in that project will have your full context.

Auto-export on change

If you're going to use Claude.ai regularly, run watch instead of export:

npx claude-context-server watch

This does the initial export immediately when it starts, then polls your memory directory every 5 seconds and automatically regenerates the file whenever anything changes. As long as watch is running, ~/claude-context-export.md is always up to date — you never need to run export manually again.

Keep it running in a terminal tab while you work. When Claude Code saves a new memory during a session, the export file is refreshed within seconds.

Why 5 seconds? Claude Code can write memories multiple times during an active session. A slow poll interval means you could finish a whole work session and still be looking at a stale export next time you open Claude.ai. The 5 second interval feels aggressive but the cost is negligible — it's only checking file modification timestamps on your local SSD, not reading file contents. The actual work of regenerating the export only happens when something has genuinely changed.

The only reason to use the manual export command is if you want a one-off snapshot without keeping a process running.


Use cases

Carrying fixes forward to a new project

Three months ago you built a Laravel app that worked perfectly in local development but hit a string of compatibility issues when deploying to a cPanel shared host — wrong PHP extensions, queue workers that needed a workaround, .htaccess rules that conflicted with the framework. You fixed each one, and Claude Code saved the solutions as memory.

Now you're starting a fresh Laravel app, also targeting cPanel. Instead of discovering the same issues again mid-deployment, you ask:

"What cPanel deployment issues did we run into on the last Laravel project?"

Claude queries this server, pulls the fixes from that project's memory, and applies them from the start — the right PHP config, the queue workaround, the .htaccess rules — before you've written a single route.


Applying rules from one project to another

You're a web designer and taught Claude several rules on a marketing website: no em dashes in copy, blog images must be landscape at 1200px, blog posts finish with a CTA linking to the contact form. Those lessons live in that project's memory.

When you start building a similar website, Claude in that new project has no idea those rules exist. With this server, it can query:

"What feedback and preferences do you have for blog post structure?"

And apply every hard-won rule from day one, without you having to re-teach them.


Context on your phone

You're away from your desk and want to think through an architecture decision for your CRM. You open Claude on your phone — which has no access to your local files. But you ran npx claude-context-server export this morning and uploaded the result to a Claude.ai Project.

Claude on your phone already knows the CRM's tech stack (Laravel 11, Blade + Tailwind + Alpine, cPanel deployment), the lead capture SDK architecture, the deployment cron setup, and every other decision made in previous sessions. You can have a real, grounded architecture conversation without being at your computer.


Shared conventions across a client's projects

You're a design agency. You've just finished the Big Boss Gyms website and documented the brand in a DESIGN.md file — brand red #D32027, the Outfit/Manrope font stack, button styles, spacing scale, and logo usage rules. You ask Claude Code to save it as a reference memory so it travels with the project.

Six months later, the client wants an invoicing tool. You open a new project folder and type:

"Build an invoicing tool for Big Boss Gyms"

Claude queries this server, finds the design memory from the website project, and builds the invoicing tool in the right red, with the right fonts, following the same copy rules — without you pasting a style guide or briefing it on the brand. The invoicing tool looks like it belongs to the same family as the website from the first line of code.


Reusing custom skills across projects

You build small business websites and created a /add-service skill in your first project — it knows your service page structure, the sections you always include, the tone, the CTA placement. It took a few iterations to get right.

When you start the next small business website, ask Claude:

"What custom skills does my Big Boss Gyms Website project have?"

Claude queries this server, returns the full /add-service skill definition, and can recreate it in the new project with one follow-up:

"Add that skill to this project."

Every website you build from that point inherits the skill automatically — no copying files, no re-explaining the structure.


Updating other projects without switching context

You're deep in Project A when you solve something that applies to Projects B and C as well — a tricky API integration, a deployment fix, a pattern worth reusing. Normally you'd have to finish what you're doing, open each other project, and save the memory there. With this server, you don't leave where you are:

"Save this authentication approach as a reference memory in the CRM project and the invoicing project."

Claude writes the memory directly to both projects. Next time you open either one, it's already there.


How it works

Claude Code auto-saves memory files to ~/.claude/projects/*/memory/ as you work. Each file has frontmatter with a type (user, feedback, project, reference) and a markdown body. This server reads them fresh on every tool call — no database, no sync, always up to date.

get_project goes further: it resolves the real project directory on disk and reads your CLAUDE.md instructions, detects the tech stack from manifest files (package.json, composer.json, requirements.txt, etc.), and fetches the last 10 git commits.

As long as Claude Code has opened a project — creating a .claude folder for it — this server will pull everything it can from it. Tech stack, git history, and CLAUDE.md are available from day one, before a single memory has been saved.

save_memory lets any Claude instance write a memory file back to any project — so Claude Desktop or Claude.ai (after an export upload) can create memories that Claude Code will see the next time you open that project.

Your memory is only as good as what you save

Conversation history is intentionally not read. Chat transcripts are large, noisy, and often contain things discussed in passing that were never meant to be permanently surfaced. Memories exist to distill what actually matters out of those conversations.

The better habit is to ask Claude to save something as a memory during the session rather than trying to recover it from transcripts later. If a decision was made, a pattern agreed on, or a lesson learned — tell Claude to remember it before you close the chat.

Memory isn't just for capturing what happened — you can deliberately teach Claude patterns and conventions so they're available everywhere. For example:

"Remember: for all my Laravel APIs, every endpoint returns the same response envelope — { data: ..., meta: { success: bool, message: string } }. Controllers extend BaseApiController which has successResponse() and errorResponse() helpers. Never return raw model data directly."

Claude saves this as a reference memory. Every new Laravel project you start, this server surfaces that convention automatically — Claude structures every controller the same way without you specifying it, and flags code that breaks the pattern.

What works well in memory: architectural conventions, response formats, naming rules, copy style guides, deployment checklists, client preferences, small representative snippets.

What doesn't belong in memory: full component implementations (keep those as actual shared files), things that change with every release, anything you'd want version-controlled.

Memory file format

---
name: short-slug
description: one-line summary
metadata:
  type: user | feedback | project | reference
---
Body content here.

Contributing / building from source

git clone https://github.com/carlformigoni/claude-context-server.git
cd claude-context-server
npm install
npm run build

Run locally instead of via npx:

claude mcp add --scope user claude-context-server -- node /path/to/claude-context-server/dist/index.js

Available Tools

5 tools
get_all_contextA

Dump everything — all projects and all memory entries — into one structured markdown document. Use this for a full context upload to Claude.ai.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description indicates a read operation retrieving large data, but does not disclose potential performance or size implications. The output format is mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first explains action, second gives use case. No wasted words, front-loaded with the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description is fairly complete. It explains output format and a primary use case, though 'memory entries' could be clarified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so parameter semantics are not needed. Baseline score of 4 applies as no additional info is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it dumps all projects and memory entries into a structured markdown document, distinguishing it from siblings like get_project (specific project) and list_projects (list only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the primary use case: full context upload to Claude.ai. While it does not exclude other uses, this is sufficient guidance given the tool's broad purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectA

Get the full memory content for a specific project. Supports fuzzy name matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameYesProject name or partial name to look up (fuzzy matched)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses fuzzy matching behavior, but does not reveal side effects, authentication needs, or whether it is read-only. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no unnecessary words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the core action and fuzzy matching, but does not differentiate from sibling tool 'search' which may also return project memory. Lacks full context for an agent to choose correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description repeats the fuzzy matching info from the schema, adding no new semantics beyond the purpose statement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'full memory content for a specific project,' and distinguishes itself with 'Supports fuzzy name matching' from siblings like list_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing a specific project's memory by name/fuzzy match, but provides no explicit guidance on when to use this vs alternatives like search or list_projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_profileA

Aggregate all 'user' type memory entries across every project into a single profile.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the aggregation behavior but does not disclose return format, performance, or other traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded, and contains no unnecessary words; every part contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with no output schema, the description covers the core behavior. However, it could be more specific about what the 'single profile' contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. With 0 params, baseline is 4, and the description suffices without needing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Aggregate' and a clear resource 'user type memory entries across every project', making the tool's purpose distinct from siblings like get_all_context and get_project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving a unified user profile but lacks explicit guidance on when not to use it or how it compares to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA

List all Claude Code projects that have saved memory files, with their decoded paths and summary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must compensate. It states the tool lists projects and returns paths and summary, which is non-destructive. However, it does not disclose potential side effects, authentication needs, or any behavioral caveats, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence that conveys the purpose and output concisely. No redundant or wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and no annotations, the description sufficiently covers what the tool does and what it returns. It is complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description does not need to explain parameter semantics beyond what the schema already provides. Baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'Claude Code projects that have saved memory files', and the output details ('decoded paths and summary'). It effectively distinguishes from siblings like 'get_project' (single project) and 'get_all_context' (all context).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing projects with memory files but does not explicitly state when to use or when not to use, nor does it mention alternative tools. The purpose is clear, but guidance on selection is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: full dump, specific project retrieval, user profile aggregation, listing projects, and full-text search. No overlap.

Naming Consistency5/5

All tools use verb_noun pattern with underscores (e.g., get_all_context, get_project, list_projects, search). Even 'search' fits the imperative verb style. Consistent.

Tool Count5/5

5 tools is well-scoped for a context management server, covering essential operations without being too few or too many.

Completeness4/5

The set covers listing, retrieval, and search comprehensively. Minor gap: no tools for creating or updating context, but the server's role appears to be read-only export.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Persistent memory MCP server for Claude Code that captures and recalls project context across sessions, eliminating the need to re-explain architecture and decisions daily.
    137
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Persistent project memory MCP server for Claude Code that remembers development context across sessions, including features, fixes, notes, and standards.
    1
    MIT

Latest Blog Posts

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/carlformigoni/claude-context-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server