lsl-mcp
This server provides an authoritative LSL (Linden Scripting Language) reference for AI coding assistants, helping prevent hallucinated functions, wrong signatures, and unsupported syntax. It offers the following tools:
lookup_function(name)— Look up a specific LSL function by name to get its full record: signature, parameters, return type, delay, energy cost, caveats, examples, related functions, and known AI pitfalls. Includes fuzzy matching anddid_you_meansuggestions when no exact match is found.search_functions(query, limit?)— Full-text search across LSL function names and descriptions using natural language or keywords. Returns a ranked summary list.get_pitfalls(category?, ai_source?)— Retrieve a curated database of known LSL mistakes made by AI coding assistants, filterable by category (e.g.nonexistent_functions,unsupported_syntax) or by AI tool source.check_code(code)— Scan raw LSL source code for known AI-generated mistakes, including hallucinated function names, unsupported syntax (ternary operators, switch statements), and reserved words used as variable names. Returns line numbers and fix suggestions.list_events(name?)— List all valid LSL event signatures, or look up a specific event by name to verify it exists and get its parameter details.get_constants(category?, name?)— Browse or look up LSL constants by category (e.g.permissions,prim_params) or by exact name (e.g.NULL_KEY,PERMISSION_TAKE_CONTROLS).
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., "@lsl-mcpcheck this LSL script for common pitfalls"
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.
lsl-mcp
A Model Context Protocol (MCP) server providing accurate LSL (Linden Scripting Language) reference data to AI coding assistants. Grounded in the official Second Life wiki, with a curated database of AI-specific pitfalls.
Motivation
AI coding assistants (Claude Code, Kiro, etc.) frequently produce incorrect LSL — hallucinated function names, unsupported syntax, and wrong signatures. This server gives those tools a live, authoritative reference to query against rather than relying on training data.
Related MCP server: PAELLADOC
Design Goals
Portable LSL only — no Firestorm-specific syntax
AI-aware — pitfalls are categorised and tagged by which tool produced them
Git-tracked — JSON is the source of truth; SQLite is always derivable
Incrementally maintainable — new pitfalls are captured via CLI as they are discovered
Project Structure
lsl-mcp/
├── server.py # MCP server entrypoint
├── db/
│ ├── schema.sql # Table definitions
│ └── lsl.db # SQLite database (gitignored)
├── data/
│ ├── functions/ # One JSON file per LSL function (source of truth)
│ ├── pitfalls.json # Language pitfalls collection (source of truth)
│ └── constants.json # LSL constants
├── scripts/
│ ├── scrape_wiki.py # Populates data/functions/ from the LSL wiki
│ ├── load_db.py # Imports JSON data into lsl.db
│ └── add_pitfall.py # CLI tool for adding new pitfalls
├── tools/
│ ├── lookup.py # lsl_lookup_function, lsl_search
│ ├── pitfalls.py # lsl_get_pitfalls, lsl_check_code
│ └── reference.py # lsl_list_events, lsl_constants
└── pyproject.tomlRequirements
Python 3.11+
uv (recommended) or pip
Initial Setup
1. Install dependencies
Using uv (recommended):
uv syncUsing pip:
pip install -e .For development (includes pytest):
uv sync --dev
# or
pip install -e ".[dev]"2. Scrape the LSL wiki
Populates data/functions/ with one JSON file per function. Approximately 700 functions; takes several minutes due to polite request throttling.
python scripts/scrape_wiki.pyTest a single function first:
python scripts/scrape_wiki.py --function llListen --dry-run2. Initialise the database
Creates db/lsl.db from db/schema.sql and loads all JSON data.
python scripts/load_db.py3. Connect to Claude Code
Register the server with Claude Code (personal scope):
# using uv (recommended)
claude mcp add --transport stdio lsl -- uv run /path/to/lsl-mcp/server.py
# using python directly
claude mcp add --transport stdio lsl -- python /path/to/lsl-mcp/server.pyOr add a .mcp.json to your project root for project-wide sharing:
{
"mcpServers": {
"lsl": {
"type": "stdio",
"command": "uv",
"args": ["run", "/path/to/lsl-mcp/server.py"]
}
}
}Verify the server is connected:
claude mcp listMCP Tools
Tool | Description |
| Exact or fuzzy match on function name. Returns full record including signature, parameters, caveats, and known AI pitfalls. Falls back to |
| Full-text search across function names and descriptions. Returns ranked summary list. |
| Returns all pitfall entries, optionally filtered by category or source tool. |
| Scans raw LSL source for known AI-generated mistakes. Returns line numbers and suggestions. |
| Returns all valid LSL event signatures, or looks up one by name. |
| Returns constants by category or direct name lookup. |
Recommended AI workflow
Before starting an LSL task:
get_pitfalls() ← full briefing on known mistakes
While writing LSL:
lookup_function("llFoo") ← verify signature before use
list_events("touch_start") ← verify event name and parameters
get_constants("permissions") ← browse constants by category
Before presenting code to the user:
check_code(generated_lsl) ← catch mistakes before they reach the userPitfall Categories
Category | Description |
| LSL type names or keywords used as variable identifiers |
| Hallucinated function names with no LSL equivalent |
| Syntax valid in other languages but a compile error in LSL |
| Permission/access scope issues that silently block operations |
| Implicit casting that LSL does not perform |
| Unexpected behavior around state changes |
| Functions with hidden sleeps or inefficient patterns |
Adding a Pitfall
When an AI tool produces incorrect LSL, capture it:
python scripts/add_pitfall.py \
--category nonexistent_functions \
--title "llStringReplace does not exist in LSL" \
--bad "llStringReplace(src, old, new)" \
--good "llReplaceSubString(src, pattern, replacement, count)" \
--ai-source kiro \
--notes "llStringReplace is a plausible-sounding hallucination, likely confused with string replace conventions in other languages."Then sync the database and commit:
python scripts/load_db.py --only pitfalls
git add data/pitfalls.json
git commit -m "pitfall(func_001): llStringReplace does not exist [kiro]"Claude-assisted capture
Describe the mistake to Claude in plain language. Claude will format it into the correct schema and emit the exact CLI command to run. You verify, run it, and commit. Claude never writes to the database directly — the CLI is the deterministic protocol.
--dry-run
Preview what would be written without touching any files:
python scripts/add_pitfall.py --category unsupported_syntax --title "..." --dry-runRefreshing Wiki Data
Re-scrape all functions and reload:
python scripts/scrape_wiki.py --overwrite
python scripts/load_db.py --only functionsRe-scrape a single function:
python scripts/scrape_wiki.py --function llReplaceSubString
python scripts/load_db.py --only functionsDatabase
db/lsl.db is gitignored — it is always fully derivable from the JSON sources via load_db.py. Only data/ and db/schema.sql are version-controlled.
To rebuild from scratch:
python scripts/load_db.py --resetPitfall ID Format
IDs are assigned automatically by add_pitfall.py based on category:
Category | Prefix | Example |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Known Pitfalls
ID | Category | Issue | Source |
|
| Boolean NOT | claude-code |
|
| Cached owner key not updated after ownership transfer | claude-code |
|
|
| kiro |
|
|
| kiro |
|
| Ternary operator not supported | both |
|
| Switch statements not supported | both |
|
| Transfer-only permissions silently prevent script edits | kiro |
|
|
| both |
Testing
# Run all tests
python3 -m pytest
# Verbose output
python3 -m pytest -v
# Single module
python3 -m pytest tests/test_pitfalls.pyTests use an in-memory SQLite fixture database built from db/schema.sql — no real lsl.db or network access required. The conftest.py fixture patches DB_PATH in all tool modules automatically.
Test file | Coverage |
|
|
|
|
|
|
| ID generation logic in |
gitignore
db/lsl.db
data/functions/
data/scrape_errors.json
__pycache__/
*.pyc
.venv/
data/functions/is gitignored because it is fully regenerable from the wiki. Onlydata/pitfalls.jsonanddata/constants.jsonare committed — these contain hand-curated data that cannot be scraped.
Available Tools
6 toolscheck_codeA
Scan an LSL code snippet for known AI-generated pitfalls.
Checks for nonexistent function calls, unsupported syntax (ternary operators, switch statements), reserved words used as variable names, and other patterns from the pitfalls database.
Call this on any LSL you generate before presenting it to the user. Returns line numbers and suggestions for each issue found.
Args: code: Raw LSL source code as a string.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains what the tool checks (pitfalls) and that it returns line numbers and suggestions. However, it does not disclose if the tool is read-only or if it has side effects, but for a scanning tool this is acceptable. The description adds value beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (approximately 8 lines) with no wasted words. It front-loads the purpose and usage guidance, then lists checks and parameter details in a clear, structured manner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should detail the return structure. It mentions 'line numbers and suggestions' but does not specify the format (e.g., list of objects). While the tool is simple, this omission could confuse an AI agent when interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'code' has no description in the schema. The description adds 'Raw LSL source code as a string,' which clarifies the expected input. While it could specify constraints like max length, the current description is sufficient for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'scan', the resource 'LSL code snippet', and the specific purpose of finding AI-generated pitfalls. It lists specific checks like nonexistent functions and unsupported syntax, which distinguishes it from sibling tools that are informational (e.g., lookup_function, get_constants).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'Call this on any LSL you generate before presenting it to the user.' This provides clear guidance without ambiguity, covering the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_constantsA
Return LSL constants, optionally filtered by category or name.
Call with no arguments to see available categories and total count. Use category to browse a group (e.g. "permissions", "prim_params"). Use name for a direct lookup (e.g. "NULL_KEY", "PERMISSION_TAKE_CONTROLS").
Args: category: Optional category filter. See response for valid categories. name: Optional exact constant name. Takes precedence over category.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description adequately explains behavior: default returns categories/count, category filters, name overrides category. It lacks mention of error handling for invalid inputs but covers core mechanics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear summary followed by usage scenarios and structured Arg section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers all scenarios: no args, category, name, and precedence. It provides complete guidance for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully compensates by explaining both parameters: category as a filter, name as exact lookup with precedence over category. This adds essential meaning beyond the schema's bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns LSL constants with optional filtering by category or name. It distinctly separates from siblings like 'check_code' and 'get_pitfalls' by specifying the exact resource and operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit instructions are given: call with no arguments to see categories, use category for browsing, use name for direct lookup with precedence. This clarifies when to use each parameter and contrasts with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pitfallsA
Return known LSL pitfalls for AI coding assistants.
Call with no arguments for a full briefing before starting an LSL task. Filter by category or by which AI tool produced the mistake.
Args: category: reserved_words | nonexistent_functions | unsupported_syntax | scoping | type_coercion | state_behavior ai_source: kiro | claude-code | both
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| ai_source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It describes the tool as returning pitfalls, implying a read-only operation. However, it doesn't disclose potential side effects, rate limits, or authentication needs. The description is adequate but not rich in behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear purpose statement, usage guidance, and parameter details. It is front-loaded with the main intent and contains no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two optional parameters and no output schema, the description provides sufficient context: purpose, usage, and parameter options. It doesn't describe the return format, but for a list of pitfalls, this is likely acceptable. Overall, it is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description compensates by listing allowed values for category and ai_source in the Args section. It explains that category can be one of several enumerated values and ai_source can be 'kiro', 'claude-code', or 'both', adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns known LSL pitfalls for AI coding assistants. It specifies the verb 'Return' and the resource 'known LSL pitfalls'. It also differentiates from sibling tools like check_code and get_constants by focusing specifically on pitfalls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends calling with no arguments for a full briefing before starting an LSL task. It also explains how to filter by category or ai_source. While it doesn't explicitly state when not to use it, the usage advice is clear and contextual.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsA
Return valid LSL event signatures.
Call with no arguments to get all events and verify an event name exists. Call with a name to get the full signature and parameter details.
Args: name: Optional event name, e.g. "listen" or "touch_start". Omit to return all events.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description adequately conveys a read-only query operation and explains the two distinct behaviors. No side effects or destructive actions are indicated, and the description provides sufficient behavioral context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using three well-structured sentences and a clear arg specification. Every sentence adds value without redundancy, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and one optional parameter, the description covers all necessary aspects: purpose, two usage modes, and parameter behavior. It could be slightly more specific about the return format, but overall it is complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing a natural language explanation, including an example ('listen', 'touch_start'), and explicitly states what happens when the parameter is omitted versus provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool returns LSL event signatures and explicitly differentiates between listing all events and retrieving details for a specific event. This sets it apart from siblings like lookup_function (for functions) and check_code (for code checking).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage instructions for both calling modes: with no argument to list all events, or with a name to get full signature details. Does not explicitly contrast with siblings, but the context from sibling names and the description makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_functionA
Look up an LSL function by name.
Returns the full function record: signature, parameters, return type, delay, energy cost, caveats, examples, related functions, and any known AI-specific pitfalls associated with this function.
Falls back to fuzzy matching if the exact name is not found, and returns a 'did_you_mean' list when no match exists at all — helping catch hallucinated function names.
Args: name: Function name, e.g. "llListen" or "llReplaceSubString".
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses fuzzy matching, 'did_you_mean' list, and full return record (signature, parameters, etc.), fully informing the agent of behavior without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with clear bullet-like listing of return fields; every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a single-parameter tool without output schema; covers return content, fallback, and examples adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Provides concrete examples like 'llListen' and 'llReplaceSubString,' adding value beyond the schema, though schema coverage is 0%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Look up an LSL function by name,' distinguishing it from sibling 'search_functions' by emphasizing exact lookup and fuzzy fallback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates use for exact names with fallback and 'did_you_mean' for non-matches, but doesn't explicitly contrast with 'search_functions' or specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_functionsA
Full-text search across LSL function names and descriptions.
Use when you know roughly what a function does but not its exact name. Returns a ranked summary list — call lookup_function for the full record.
Args: query: Keywords or natural language, e.g. "listen channel message" or "set prim texture face". limit: Maximum results to return (default 10, max 25).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully bears the burden of behavioral disclosure. It mentions 'returns a ranked summary list' but does not describe the search algorithm, ranking criteria, pagination, error handling, or structure of the summary. For a tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized: a one-line purpose statement, a two-line usage guideline, and two-line parameter descriptions (with examples). Every sentence is necessary and front-loaded with the most important info. No fluff or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and no annotations, the description lacks details about the return format (structure of summary list, fields included). It also doesn't mention rate limits, error cases, or behavior when no results found. However, the param descriptions are good and the usage guidance is clear. It is somewhat incomplete but functional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides meaningful explanations: for 'query' it says 'Keywords or natural language, e.g. "listen channel message" or "set prim texture face".' for 'limit' it says 'Maximum results to return (default 10, max 25).' These add significant meaning beyond the schema's mere titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Full-text search across LSL function names and descriptions.' It uses specific verb (search) and resource (LSL function names/descriptions) and explicitly distinguishes from sibling 'lookup_function' by saying it returns a ranked summary list and to use lookup_function for the full record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use when you know roughly what a function does but not its exact name.' and 'returns a ranked summary list — call lookup_function for the full record.' This explicitly tells when to use and when not to use, with an alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
check_code - First observed
get_constants - First observed
get_pitfalls - First observed
list_events - First observed
lookup_function - First observed
search_functions
TDQS
Each tool targets a distinct aspect of LSL development: code checking, constants, pitfalls database, events, function lookup by name, and full-text search. No two tools have overlapping purposes, and descriptions clearly differentiate them.
All tool names follow a consistent verb_noun pattern in lowercase snake_case (e.g., check_code, lookup_function). The naming is predictable and easy to understand.
With 6 tools, the server is well-scoped for assisting with LSL code. Each tool provides essential functionality without unnecessary bloat. The count feels appropriate for the domain.
The tool set covers the core needs for LSL development: checking for pitfalls, exploring constants, events, and functions. Missing features like syntax guidance are mitigated by detailed returns from lookup_function and search_functions.
Maintenance
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn educational implementation of a Model Context Protocol server that demonstrates how to build a functional MCP server for integrating with various LLM clients like Claude Desktop.1163MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol (MCP) server that implements AI-First Development framework principles, allowing LLMs to interact with context-first documentation tools and workflows for preserving knowledge and intent alongside code.338AGPL 3.0
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides AI models with structured access to external data and services, acting as a bridge between AI assistants and applications, databases, and APIs in a standardized, secure way.2-
- AlicenseBqualityCmaintenanceProduction-grade, autonomous Model Context Protocol (MCP) server that elevates AI models from stateless code generators into persistent, self-verifying software engineers.211MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/Treeeeeeeeeeeeee/second-life-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server