installed-api
Inspects installed Node.js packages from node_modules, returning package versions, export lists, and declaration information for requested symbols.
Inspects installed Python packages using the project's interpreter, returning signatures, docstrings, class/module members, source code, defining file locations, and installed versions.
Retrieves TypeScript declarations and JSDoc for symbols from installed packages' .d.ts files, with fallback to @types packages.
.---------------------------------------.
| |
| _ _ |
| / ) ( \ |
| | | | | |
| _| | __ | |_ |
| (_ | (__) | _) |
| | | | | |
| | |_ _| | |
| \\ \__) (__/ // |
| \\ // |
| \\__ __// |
| | ''--.. ..--'' | |
| | ''--'' | |
| | || | |
| | || | |
| | || | |
| '--.. || ..--' |
| ''--.. || ..--'' |
| ''--'' |
| |
'---------------------------------------'installed-api
Stop letting your agent guess at APIs. Ask the code you actually installed.
installed-api is a Claude Code plugin (an MCP server, Python standard library only) that answers
"what's the signature of X?", "does Y take that argument?" and "which version do we have?" from the
packages installed in this project: your .venv, your node_modules. It doesn't answer from
training data or from web docs written for some other version.
Why your Claude Code install needs this
The model's memory doesn't know your lockfile. Training data is a blend of many versions of every
library, and web docs describe latest. Your project pins one specific version. That gap produces
invented keyword arguments, calls to methods that were renamed two releases ago, wrong defaults, and
then a round of run, read the traceback, fix, run again.
Looking it up the hard way burns tokens. When Claude isn't sure, it falls back to grepping
site-packages or node_modules, cat-ing whole modules or bundled .d.ts files, or fetching doc
pages. All of that text goes into your context window, and you pay for it on every turn after that.
installed-api replaces it with one call that returns only the parts that matter.
To be clear about what it doesn't do: it doesn't search or index your own working directory. It saves tokens on looking up dependencies, the code your project calls but didn't write.
Without installed-api | With installed-api |
|
|
Fetch a docs page for whatever version the site documents | The declaration from the package your project resolves |
|
|
Guess, run, read the traceback, retry | Correct the first time |
The sizes in the first row were measured on one machine. Your savings depend on the library, but the
output is always bounded: up to 80 members per inspect, 12,000 characters of source, 80-line
declaration blocks, and at most 400 .d.ts files scanned per lookup.
For humans
Code that runs against the versions you pinned, not the ones the model remembers.
Smaller context, cheaper sessions. Targeted answers instead of whole files dumped into the conversation.
Nothing to install or configure. Python 3.11+ standard library only. It finds
.venv/venv,$VIRTUAL_ENV, poetry and pdm environments,node_modulesand@types/*on its own.Private and read-only. It makes no network requests, sends nothing anywhere, and writes nothing.
Tested on Python 3.11 through 3.15 in CI on every push and PR.
For LLM agents reading this
If these tools are available to you, use them in preference to your memory for any third-party API:
Before you write a call to a library function or class, call
py_inspect(Python) ornode_types(JS/TS) on it. Use the returned signature and the installed version. Trust them over what you recall.When the user asks "which version" or you're about to suggest version-specific code, call
py_versions/node_versions.When the docstring doesn't settle how something behaves, call
py_sourceinstead of greppingsite-packagesor reading whole files.For the user's own package (
./srclayouts), passinclude_project: true.
One call usually answers the question. Results include defined_at / file paths, so you can cite
exactly where the answer came from.
Related MCP server: FastAPI Architect MCP
Tools
Tool | What it returns |
| Signature, docstring, members (for classes and modules), MRO, defining |
| The source of an installed function, class or module |
|
|
| A symbol's TypeScript declaration with its JSDoc, from |
|
|
The interpreter is chosen in this order: .venv / venv (searched upward to the repo root), then
$VIRTUAL_ENV, the poetry or pdm env, and finally python3. Python lookups import the target module in
a subprocess (python -I), so they run that package's import-time code, as using it would.
include_project: true also imports from ./src and ./.
Example (py_inspect with target: "pytest.approx", output trimmed):
{
"target": "pytest.approx",
"kind": "function",
"version": "pytest 9.1.1",
"defined_at": ".../site-packages/_pytest/python_api.py:646",
"signature": "(expected: 'Any', rel: 'float | Decimal | timedelta | None' = None, abs: 'float | Decimal | timedelta | None' = None, nan_ok: 'bool' = False) -> 'ApproxBase'",
"doc": "Assert that two numbers (or two ordered sequences of numbers) are equal to each other\nwithin some tolerance. ..."
}Supported versions
installed-api supports the Python and Node.js release lines that still receive at least security
updates; a line is dropped once it reaches end of life. As of October 2026 that is Python 3.11–3.15
and Node.js 22, 24 and 26. Node.js is never executed: node_types and node_versions read
package.json and .d.ts files from node_modules.
Install
In Claude Code:
/plugin install installed-api --marketplace ajwann/installed-apiFrom Anthropic's plugin directory, once listed: search for installed-api in /plugin directory in Claude Code, or under Customize > Plugins on claude.ai.
To try it from a clone for one session: claude --plugin-dir /path/to/installed-api.
What it runs and stores
It is Python 3.11+ standard library only, makes no network requests, and sends nothing anywhere.
Runs the project's Python interpreter (
python -I) to import and inspect the module you ask about, which runs that package's import-time code.Reads
.d.tsfiles andpackage.jsonundernode_modules. It writes nothing.
Development
python3 -m pytest -q
claude plugin validate --strict .License
MIT. See LICENSE.
Available Tools
5 toolsnode_typesA
Read TypeScript declarations of a package installed in node_modules (falls back to @types/*). With symbol: the declaration(s) of that function/class/interface/type with JSDoc and file:line. Without: the package version and its exported names.
Inputs: package (required), symbol, project_dir.
node_versionsB
List packages installed in the nearest node_modules (name@version) whose name contains pattern.
Inputs: pattern, project_dir.
py_inspectA
Inspect a Python object as installed in the project's own interpreter: signature, docstring, members (for modules/classes), defining file:line and the installed distribution version. target is a dotted path such as 'requests.Session.request' or 'pandas.DataFrame.merge'.
Inputs: target (required), max_members, project_dir, include_project.
py_sourceC
Return the source code of an installed Python function/class/module (truncated to max_chars).
Inputs: target (required), max_chars, project_dir, include_project.
py_versionsA
List installed Python distributions (name==version) in the project's interpreter whose name contains pattern (empty pattern lists all).
Inputs: pattern, project_dir.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct resource+action: metadata inspection (py_inspect), raw source (py_source), and version listing (py_versions) for Python; declarations (node_types) and version listing (node_versions) for Node. The py_/node_ split makes cross-language selection unambiguous, and the inspect-vs-source boundary is clear from the descriptions.
All five tools follow a strict <lang>_<noun/verb> pattern (py_inspect, py_source, py_versions, node_types, node_versions). Prefixes group by ecosystem and suffixes consistently denote the operation, making the set highly predictable.
Five tools is well-scoped for a dual-ecosystem introspection server: three for Python, two for Node, each earning its place with no redundant members. Nothing feels padded or thin for the stated purpose.
The Python side has both metadata inspection and source retrieval, but the Node side only offers type declarations and versions — there is no equivalent of py_source for reading installed JS implementation code. This asymmetry leaves a notable gap for agents debugging Node packages, though version and type coverage is solid.
Maintenance
Related MCP Connectors
The official Model Context Protocol server for Ambee. It gives any MCP-compatible AI assistant — Claude, ChatGPT, Cursor, VS Code, Ollama, and more direct access to live air quality, pollen, and weather data. To get started, including information on signing up and obtaining your Ambee key, check out the Ambee documentation on https://docs.ambeedata.com
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Nifra docs, runnable examples, and API types as an MCP server for any AI assistant.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that publishes CLI tools on your machine for discoverability by LLMs7 npm1MIT
- AlicenseAqualityBmaintenanceAn MCP server that gives Claude Code IDE-level intelligence for FastAPI projects — semantic code navigation, safe renaming, route inspection, dependency trees, and Pydantic model analysis. Instead of Claude reading files blindly, it calls structured tools backed by Jedi (Python language server) and Python's AST.191MIT
- AlicenseBqualityDmaintenanceMCP server for accessing Claude Code plugins. Enables retrieving plugin lists and detailed information via MCP clients like Claude Desktop, Cursor.2MIT
- AlicenseNot gradedqualityDmaintenanceA dead simple MCP server for exposing your app functions to AI agents like Claude Desktop.13 npm6MIT