Lessons Learned MCP Server
Allows Google Antigravity (Gemini) to query and retrieve lessons learned and project-specific implementation details via MCP.
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., "@Lessons Learned MCP Serversearch for lessons about database migrations"
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.
Lessons Learned MCP Server
Central MCP server for storing and querying lessons learned and project-specific implementation details. A Laravel application that exposes two MCP endpoints for any MCP-capable AI client — Cursor, Claude Code, Google Antigravity, and others.
Explainer Video

Watch the explainer on YouTube.
Related MCP server: repo-memory-mcp
Use with ashwinmram/mcp-pusher
This server works with the ashwinmram/mcp-pusher package to push lessons and project details from your Laravel projects via HTTP API.
Install:
composer require ashwinmram/mcp-pusher:^3.0Best practice: Copy the knowledge capture prompt into your agent; agent gathers git context, synthesizes lessons, runs
mcp:append→ drafts.mcp:pushonce at session end. Optional Cursor preCompact hook surfaces the same prompt automatically.
The mcp-pusher package pushes session drafts from docs/.mcp-session/*.jsonl to /api/lessons (generic) and /api/project-details (project-specific) in one mcp:push. See Pushing knowledge (mcp-pusher 3.0) and packages/laravel-mcp-pusher/README.md.
Key Features
Lessons Learned MCP (
/mcp/lessons) — Search, browse, and retrieve lessons with relevance scoringProject Details MCP (
/mcp/project-details?project=…) — Project-specific implementation details (paths, env, conventions)Tools: SearchLessons, GetLessonByCategory, GetLessonTags, FindRelatedLessons, MarkLessonHelpful, SuggestSearchQueries, GetTopLessons, GetCategoryStatistics
Resources:
lessons://overview,lessons://search-guidePrompts: LessonsLearnedOverview, LessonsByCategory
Dashboard
Authenticated users can view live stats at /dashboard. Each card shows a current value, a baseline, and a variance badge.
Two comparison patterns are used, both anchored on 30 days:
Metric | Current value | Baseline (gray text) | Badge change |
Total Lessons, Total Project Details, Source Projects, per-source-project cards | Cumulative count now | Same count at 30 days ago | Percent change |
Retrievals, Details Added | Count in last 30 days | Count in prior 30 days (days 30–60 ago) | Percent change |
Helpfulness Rate | Rate in last 30 days | Rate in prior 30 days | Percentage-point change (e.g. 60% vs 50% = +10.0 points) |
See in-app Documentation for the same details.
Prerequisites
PHP 8.2+, Laravel 12
MySQL or SQLite
Laravel Herd (recommended) or equivalent local dev setup
An MCP-capable AI client (Cursor, Claude Code, Google Antigravity, or other)
Initial Setup
1. Clone and Install
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate2. Configure Environment Variables
Add the following to your .env file:
# MCP server (HTTP base URL for MCP clients and API pushes)
APP_URL=https://mcp-server.test
MCP_SERVER_NAME="Lessons Learned MCP Server"
# MCP client (for pushing from this project via mcp-pusher)
MCP_SERVER_URL=https://mcp-server.test
MCP_API_TOKEN= # Generated in step 33. Generate API Token
Generate a Sanctum API token for MCP authentication:
php artisan mcp:generate-token --name="mcp-client-token"This command creates a user if none exists, generates a Sanctum token, and displays it. Copy the token (shown only once) and add it to .env:
MCP_API_TOKEN=your-token-hereUse the same token in your MCP client Authorization: Bearer … header.
4. Verify Setup
Ensure your site is accessible. With Laravel Herd:
curl https://mcp-server.testIf needed, link the project to Herd:
herd link mcp-serverTest the MCP endpoint:
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" \
https://mcp-server.test/mcp/lessonsConfiguring your AI client
All clients need:
Lessons URL:
https://mcp-server.test/mcp/lessonsProject details URL (optional):
https://mcp-server.test/mcp/project-details?project=<source>—projectmust matchphp artisan mcp:push --source=…Header:
Authorization: Bearer YOUR_SANCTUM_TOKEN
Example config files (copy and edit): cursor, claude, antigravity. Root mcp.json.example is a minimal Cursor-oriented sample.
Cursor
Settings UI
Open Cursor Settings:
⇧+⌘+J(Mac) orCtrl+Shift+J(Windows/Linux)Features → MCP → Add MCP Server
Configure:
Name:
lessons-learned-local(or any name)Transport:
SSEURL:
https://mcp-server.test/mcp/lessonsHeaders:
{"Authorization": "Bearer YOUR_SANCTUM_TOKEN_HERE"}
Save and restart Cursor
Project mcp.json
{
"mcpServers": {
"lessons-learned-local": {
"transport": "sse",
"url": "https://mcp-server.test/mcp/lessons",
"headers": {
"Authorization": "Bearer YOUR_SANCTUM_TOKEN_HERE"
}
}
}
}Global:
~/.cursor/mcp.jsonor Settings UI — all projectsProject:
mcp.jsonin project root — this project only (gitignore tokens)
Verify: Settings → MCP → server Connected. Ask: "What lessons do we have about testing Laravel packages?"
Claude Code
Prefer HTTP transport (Laravel Mcp::web uses HTTP). Use SSE only if HTTP fails.
CLI
claude mcp add --transport http lessons-learned \
https://mcp-server.test/mcp/lessons \
--header "Authorization: Bearer YOUR_TOKEN"
claude mcp add --transport http project-details-my-app \
"https://mcp-server.test/mcp/project-details?project=my-app" \
--header "Authorization: Bearer YOUR_TOKEN"Project .mcp.json
{
"mcpServers": {
"lessons-learned": {
"type": "http",
"url": "https://mcp-server.test/mcp/lessons",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}Scopes: local (default, ~/.claude.json), project (.mcp.json in repo), or user. See Claude Code MCP docs.
Verify: claude mcp list — servers show connected; start a session and query lessons.
Google Antigravity
Shared config: ~/.gemini/config/mcp_config.json (Antigravity IDE and CLI share this path per Google codelabs).
{
"mcpServers": {
"lessons-learned": {
"serverUrl": "https://mcp-server.test/mcp/lessons",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
},
"project-details-my-app": {
"serverUrl": "https://mcp-server.test/mcp/project-details?project=my-app",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}UI: Agent panel → ... → MCP Servers → refresh; add or verify servers.
Verify: MCP server shows connected; ask the agent about available lessons.
Agent startup instructions
Install agent instructions for your AI client:
Client | Command |
Cursor |
|
Claude Code |
|
Google Antigravity |
|
All |
|
See agent-instructions README for flags and manual paths.
# Example: full setup for Cursor + Claude + Antigravity (workspace skills)
php artisan mcp:install-agent-instructions --with-hooks --with-claude-md --with-cursorrulesThis monorepo uses a short .cursorrules index; consumer projects should use the install commands above or copy stubs from packages/laravel-mcp-pusher/stubs/.
How sessions use the MCP server
Your AI client connects with the configured URL and Bearer token
The server exposes
lessons://overviewand MCP tools/promptsWith startup instructions configured, the agent reads the overview and queries relevant lessons
Lessons inform coding decisions during the session
Example prompts (any client)
"What lessons do we have about Laravel validation?"
"Show me lessons tagged with 'php' and 'best-practices'"
"Give me an overview of available lessons"
"What do we know about testing Laravel packages?"
Available MCP Components
Tools
SearchLessons — Search by keyword, category, or tags (MySQL FULLTEXT + relevance scoring)
GetLessonByCategory — Get all lessons in a category
GetLessonTags — List available tags
FindRelatedLessons — Find related lessons by topic relationships
MarkLessonHelpful — Provide feedback for relevance scoring
SuggestSearchQueries — Expand searches with related queries
GetTopLessons — Get highest relevance lessons (optionally by category)
GetCategoryStatistics — Category stats (avg relevance, top lessons, usage)
Resources
lessons://overview — Overview of lessons, categories, tags, and recent lessons
lessons://search-guide — Search strategies, query examples, relevance scoring
Prompts
LessonsLearnedOverview — Overview of available lessons
LessonsByCategory — Summary of lessons in a specific category
Pushing knowledge (mcp-pusher 3.0)
Consumer projects use ashwinmram/mcp-pusher. See What's new in 3.0.
Before (1.x / 2.x) | After (3.0) |
Edit markdown/JSON in |
|
|
|
Workflow (all IDEs)
Copy the knowledge capture prompt block from the package README into your agent (or use the optional Cursor preCompact hook).
Agent gathers git context, synthesizes lessons, runs
mcp:append→docs/.mcp-session/lessons-draft.jsonland/orproject-details-draft.jsonl.End of session: review drafts (see package README), then
php artisan mcp:push --source=<project>.
Draft files are cleared after a successful push unless --no-truncate. Use mcp:extract-session only if drafts are thin after compaction and you have committed work (git-only; see mcp-pusher README).
File layout (3.0)
your-project/
└── docs/
└── .mcp-session/
├── lessons-draft.jsonl ← generic lessons
└── project-details-draft.jsonl ← project-specific detailsThis server (monorepo)
php artisan mcp:push --source=mcp-serverOther Laravel projects
composer require ashwinmram/mcp-pusher:^3.0Configure MCP_SERVER_URL, MCP_API_TOKEN, gitignore docs/.mcp-session/. Full guide: package README.
Optional: Cursor hooks (this monorepo)
mkdir -p .cursor/hooks
cp packages/laravel-mcp-pusher/stubs/cursor-hooks/hooks.json.example .cursor/hooks.json
cp packages/laravel-mcp-pusher/stubs/cursor-hooks/pre-compact-checkpoint.sh .cursor/hooks/
cp packages/laravel-mcp-pusher/stubs/knowledge-capture-prompt.txt .cursor/hooks/
chmod +x .cursor/hooks/pre-compact-checkpoint.shProject Details MCP Server
URL: https://mcp-server.test/mcp/project-details?project=<source_project>
Use the same Bearer token. Add one MCP server entry per project (?project=… must match --source on push).
Managing Tokens
php artisan mcp:list-tokens
php artisan mcp:list-tokens --revoke=<TOKEN_ID>
php artisan mcp:list-tokens --revoke-all
php artisan mcp:generate-token --name="mcp-client-token" --forceProduction Setup
Update
.envwith productionAPP_URLandMCP_SERVER_URLphp artisan mcp:generate-token --name="mcp-production" --email="admin@yourdomain.com"Update each MCP client with production URLs and token
Set
SANCTUM_STATEFUL_DOMAINSfor your production domain
Troubleshooting
Token not working
php artisan mcp:list-tokensphp artisan mcp:generate-token --force
Client cannot connect
Confirm URL is reachable:
curl -H "Authorization: Bearer TOKEN" https://mcp-server.test/mcp/lessonsCheck
Authorization: Bearer YOUR_TOKEN(includeBearer)Cursor: restart app; verify Settings → MCP → Connected; SSE transport in config
Claude Code:
claude mcp list; try--transport httpthen--transport sseif neededAntigravity: refresh MCP Servers in Agent panel; verify
~/.gemini/config/mcp_config.jsonusesserverUrland headersHerd: site linked and running (
herd link mcp-server)
Lessons not loading in agent
Restart the AI client (MCP often connects at startup)
Ask: "Use the LessonsLearnedOverview prompt"
tail -f storage/logs/laravel.log
Authentication errors (401)
Regenerate token; verify Bearer header in client config
SSL / certificate issues
Herd .test domains use local certificates. If the client rejects HTTPS:
Trust the certificate in the client, or use mkcert
Database / CORS
php artisan migrate:status/php artisan migrateEnsure domain is in
config/sanctum.phpstateful domains
Security Considerations
Token storage — Never commit tokens; use
.envToken rotation — Rotate if compromised
HTTPS — Required in production
Rate limiting — Consider for MCP endpoints
Project Structure
routes/ai.php— MCP route registrationapp/Mcp/— LessonsServer, ProjectDetailsServerdocs/.mcp-session/— session drafts for mcp-pusherpackages/laravel-mcp-pusher— ashwinmram/mcp-pusher (local copy)
Additional Resources
License
MIT
This server cannot be installed
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- 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/ashwinmram/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server