{"id":50690850,"url":"https://github.com/zazza123/lcp","last_synced_at":"2026-06-09T02:35:45.058Z","repository":{"id":360912025,"uuid":"1148708291","full_name":"zazza123/lcp","owner":"zazza123","description":"A lightweight Python SDK that inspects and converts installed packages into a standardized JSON manifest. Scan, validate, serve, and analyze API documentation with an optional AI‑powered docstring generator. Ideal for tooling, documentation coverage, and AI agents that need rich library metadata.","archived":false,"fork":false,"pushed_at":"2026-05-28T10:43:29.000Z","size":707,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T12:22:22.353Z","etag":null,"topics":["agent","ai","documentation","mcp","protocol","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zazza123.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-03T09:20:29.000Z","updated_at":"2026-05-28T10:43:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zazza123/lcp","commit_stats":null,"previous_names":["zazza123/lcp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/zazza123/lcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zazza123%2Flcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zazza123%2Flcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zazza123%2Flcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zazza123%2Flcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zazza123","download_url":"https://codeload.github.com/zazza123/lcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zazza123%2Flcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34089328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","ai","documentation","mcp","protocol","python"],"created_at":"2026-06-09T02:35:44.234Z","updated_at":"2026-06-09T02:35:45.052Z","avatar_url":"https://github.com/zazza123.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo.png\" alt=\"LCP Logo\" width=\"80\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eLibrary Context Protocol\u003c/h1\u003e\n\n---\n\n\u003cp class=\"readme\"\u003e\n    \u003cb\u003eDocumentation\u003c/b\u003e: \u003ca href=\"https://zazza123.github.io/lcp\"\u003ehttps://zazza123.github.io/lcp\u003c/a\u003e\n\u003c/p\u003e\n\u003chr class=\"readme\"\u003e\n\n**lcp** (*Library Context Protocol*) is primarly a protocol designed to solve the problem of AI agents not having access to up-to-date library documentation, which leads to hallucinations and inaccurate code generation. The LCP SDK provides tools to scan Python packages, extract API information, and generate LCP-compliant JSON manifests. It also includes features for analyzing documentation coverage and generating missing docstrings using AI.\n\n## Installation\n\n```bash\npip install lcp\n```\n\n## Features\n\n- Scans installed Python packages using `inspect` and `ast` modules\n- Generates LCP v1 compliant JSON files\n- Extracts functions, classes, methods, attributes, and constants\n- Parses docstrings for summaries and descriptions\n- Extracts type hints from function signatures\n- Validates output against LCP JSON schema\n- Documentation coverage analysis with JSON/Markdown reports\n- Version diff to detect deprecated symbols across releases\n- AI-powered docstring generation via OpenAI and Anthropic (`lcp[ai]`)\n- Both CLI and Python API interfaces\n- MCP server for AI agent integration\n\n## Usage\n\n### CLI\n\n```bash\n# Scan a package and output LCP JSON\nlcp scan requests -o requests.lcp.json\n\n# Include private symbols\nlcp scan mypackage --include-private\n\n# Skip validation\nlcp scan mypackage --no-validate\n\n# Start an MCP server for a library manifest\nlcp serve requests.lcp.json\n```\n\n### Python API\n\n```python\nfrom lcp import scan\n\n# Scan a package\nlcp_doc = scan(\"requests\")\n\n# Save to file\nlcp_doc.to_file(\"requests.lcp.json\")\n\n# Get as dict\ndata = lcp_doc.to_dict()\n\n# Include private symbols\nlcp_doc = scan(\"mypackage\", include_private=True)\n```\n\n## Documentation Coverage\n\nAnalyze documentation completeness of a package to identify missing docstrings.\n\n### CLI\n\n```bash\n# Generate coverage report (JSON)\nlcp coverage requests -o coverage.json\n\n# Generate coverage report (Markdown)\nlcp coverage requests -o coverage.md --format markdown\n\n# Generate both LCP manifest and coverage report in one scan\nlcp scan requests -o requests.lcp.json --coverage coverage.json\n```\n\n### Python API\n\n```python\nfrom lcp import generate_coverage\n\n# Generate coverage report\nreport = generate_coverage(\"requests\")\n\n# Check coverage percentage\nprint(f\"Coverage: {report.summary.coverage_percent}%\")\nprint(f\"Documented: {report.summary.documented}/{report.summary.total_symbols}\")\n\n# List undocumented symbols\nfor symbol in report.undocumented:\n    print(f\"  - {symbol.module}:{symbol.entity} ({symbol.kind})\")\n\n# Save report\nreport.to_file(\"coverage.json\")      # JSON format\nreport.to_file(\"coverage.md\")        # Markdown format\n```\n\n## Version Diff\n\nCompare two LCP manifests to detect symbols that were removed between versions and automatically generate deprecation entries.\n\n### CLI\n\n```bash\n# Compare two versions and print the diff report\nlcp diff v1.lcp.json v2.lcp.json\n\n# Save the diff report to a file\nlcp diff v1.lcp.json v2.lcp.json -o diff.json\n\n# Automatically update the new manifest with deprecation entries\nlcp diff v1.lcp.json v2.lcp.json --update\n```\n\n### Python API\n\n```python\nfrom lcp import diff_documents, load_lcp_document, update_document\n\n# Load two versions\nold = load_lcp_document(\"v1.lcp.json\")\nnew = load_lcp_document(\"v2.lcp.json\")\n\n# Compare\nresult = diff_documents(old, new)\nprint(f\"Removed: {len(result.removed)}, Added: {len(result.added)}\")\n\nfor sid, dep in result.deprecated.items():\n    print(f\"  {sid}: deprecated in {dep.deprecated_in}\")\n\n# Merge deprecations into the new document\nupdated = update_document(new, result)\nupdated.to_file(\"v2.lcp.json\")\n```\n\n## MCP Server\n\nThe SDK includes an MCP (Model Context Protocol) server that exposes LCP manifest data to AI agents. This allows agents to explore library APIs and generate accurate code.\n\n### Starting the Server\n\n```bash\n# Start MCP server for a library\nlcp serve requests.lcp.json\n\n# With custom server name\nlcp serve numpy.lcp.json --name numpy-docs\n```\n\n### MCP Client Configuration\n\nAdd to your MCP client configuration (e.g., Claude Desktop):\n\n```json\n{\n  \"mcpServers\": {\n    \"requests-api\": {\n      \"command\": \"lcp\",\n      \"args\": [\"serve\", \"/path/to/requests.lcp.json\"]\n    }\n  }\n}\n```\n\n### Available MCP Tools\n\n| Tool | Description |\n|------|-------------|\n| `get_manifest` | Get library metadata (name, version, language) |\n| `list_modules` | List all modules in the library |\n| `list_symbols` | Browse symbols with optional filtering by module or kind |\n| `get_symbol` | Get full details for a specific symbol |\n| `search_symbols` | Find symbols by text search |\n| `get_class_members` | Get all methods and attributes of a class |\n\n### Programmatic Usage\n\n```python\nfrom lcp.mcp_server import create_server, run_server\n\n# Create and customize server\nserver = create_server(\"path/to/manifest.lcp.json\", name=\"my-server\")\n\n# Or run directly\nrun_server(\"path/to/manifest.lcp.json\")\n```\n\n## AI Documentation Generation\n\nAutomatically generate missing docstrings using LLM providers (OpenAI, Anthropic). Requires the optional `ai` extra:\n\n```bash\npip install lcp[ai]\n```\n\n### CLI\n\n```bash\n# Generate coverage report first\nlcp coverage mypackage -o coverage.json\n\n# Generate docstrings (dry-run to preview)\nlcp docgen coverage.json --provider openai --dry-run\n\n# Generate docstrings for real\nlcp docgen coverage.json --provider openai\n\n# Use Anthropic\nlcp docgen coverage.json --provider anthropic --model claude-sonnet-4-20250514\n\n# Filter by symbol kind\nlcp docgen coverage.json --kinds class,function,method\n\n# Provide a guiding description\nlcp docgen coverage.json --description \"A web framework for building REST APIs\"\n\n# Use OpenAI reasoning models (o1, o3)\nlcp docgen coverage.json --provider openai --model o3 --reasoning\n```\n\n### Python API\n\n```python\nfrom lcp.ai import DocGenAgent, DocGenConfig, OpenAIProvider\n\n# Create provider and agent\nprovider = OpenAIProvider(model=\"gpt-4o\")\nconfig = DocGenConfig(kinds=[\"class\", \"function\"], dry_run=True)\nagent = DocGenAgent(provider=provider, config=config)\n\n# Run on a coverage JSON file\nresult = agent.run(\"coverage.json\")\n\n# Or pass a dict directly\nresult = agent.run(coverage_dict)\n\n# Inspect results\nprint(f\"Updated: {result.symbols_updated}\")\nprint(f\"Tokens: {result.total_usage.input_tokens} in / {result.total_usage.output_tokens} out\")\nfor r in result.results:\n    print(f\"  {r.symbol_id}: {r.status}\")\n```\n\n## Claude Code Plugin\n\nThe SDK ships a ready-to-install [Claude Code](https://code.claude.com) plugin in `plugin/lcp/`. It packages `lcp serve-all` as an MCP server so Claude Code can resolve any pip-installed Python library on demand — no per-project configuration required.\n\n### Prerequisites\n\n```bash\npip install lcp\n```\n\n### Installation\n\n```bash\nclaude plugin install plugin/lcp\n```\n\nOnce installed, Claude Code automatically starts the LCP MCP server on session start. The `lcp-universal` skill instructs the agent to call `resolve_library(\"package\")` before writing code that depends on an external library.\n\n### Optional: configure a registry\n\nDuring or after installation you can configure one or more registry URLs (comma-separated) for teams that host pre-built manifests for private packages:\n\n```bash\nclaude plugin config lcp registries https://raw.githubusercontent.com/your-org/lcp-registry/main\n```\n\n### Shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `/lcp:resolve \u003cpackage\u003e` | Resolve a library and summarise its public API |\n| `/lcp:scan \u003cpackage\u003e` | Scan a package and display module/symbol overview |\n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzazza123%2Flcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzazza123%2Flcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzazza123%2Flcp/lists"}