Skip to main content
Glama
Congenital

remote-skill-mcp

by Congenital

remote-skill-mcp

Dynamically expose skill files (skill.md and its sub-files) on a remote HTTP service as MCP (Model Context Protocol) tools, resources, and prompts, so any MCP client (Claude Desktop, Cursor, LobeHub, etc.) can read remote skill documents directly over stdio.

Python MCP SDK Transport License

๐Ÿ“– English documentation / ่‹ฑๆ–‡ๆ–‡ๆกฃ: README.en.md

Built on the standard MCP SDK's FastMCP runtime (not a hand-written JSON-RPC protocol layer), fully compliant with the MCP specification, directly connectable by any MCP client, and adapted for the LobeHub MCP marketplace (see lhm.plugin.json).


How it works (lazy loading, saves context)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   stdio (newline-delimited JSON-RPC)   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  MCP ๅฎขๆˆท็ซฏ  โ”‚ โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ โ”‚   server.py      โ”‚
โ”‚ (Claude็ญ‰)  โ”‚      initialize / tools/* /            โ”‚  (ๆœฌไป“ๅบ“)         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      resources/* / prompts/*          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                                                 โ”‚ HTTP GET/HEAD
                                                                 โ–ผ
                                                      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                                      โ”‚ ่ฟœ็จ‹ SimpleHTTP ๆœๅŠก โ”‚
                                                      โ”‚  /skill.md          โ”‚
                                                      โ”‚  /image/*.md ็ญ‰ๅญๆ–‡ไปถโ”‚
                                                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

At startup (lifespan, lazy loading):

  1. Fetch skill.md from REMOTE_SKILL_BASE_URL (a lightweight capability catalog describing the available skill areas);

  2. Parse its markdown links / images / bare file tokens / directory names, and run a HEAD probe on each reference (without downloading the body):

    • Reference is a file โ†’ record path + mime/size;

    • Reference is a directory โ†’ GET its HTML listing page and record the listed files (without recursively downloading file bodies);

    • Bare file names that 404 are automatically retried against known directories;

  3. Dynamically generate MCP exposures (description contains only the path list, not the body, to avoid context bloat):

    • Tool get_skill_file(path) โ€” fetch file content on demand by path;

    • Resources skill://<relative path> โ€” one resource per discovered file (downloaded only on read; text inlined, binary converted to base64);

    • Prompts skill / list_skills โ€” return the full skill.md text / capability catalog summary.

This way the agent only sees "what capability areas exist" at any given time, and only pulls the detailed document when a specific skill is actually needed, avoiding dumping all skill details into context at once. If skill.md does not list all files directly and directory drilling is required, set MCP_DISCOVER_DEPTH>=1 to recurse N levels (this downloads intermediate-level bodies to parse more references).


Related MCP server: skills-mcp-server

Features

  • โœ… Implemented with the standard MCP SDK (FastMCP), fully MCP-compliant, stdio transport

  • โœ… Lazy loading: only skill.md is read at startup; sub-files only record paths, bodies are downloaded on demand (saves context)

  • โœ… Dynamic discovery: HEAD probes for files + GET directory listing pages, parsing links/images/bare files/directory names in skill.md

  • โœ… 404 retry: failed paths are automatically retried against known directories

  • โœ… MIME inference: falls back to extension when content-type is application/octet-stream (.md etc. still treated as text)

  • โœ… Three exposure modes: tool / resource / prompt (description contains only the path list, not the body)

  • โœ… Large-file protection: refuses to read files exceeding MCP_MAX_FILE_BYTES

  • โœ… Logs go only to stderr; stdout is used solely for protocol messages

  • โœ… Tool errors are returned with isError=True (MCP convention, no client-side exceptions)

  • โœ… Adapted for the LobeHub MCP marketplace: includes lhm.plugin.json manifest, pyproject.toml metadata, MIT license


Provided MCP capabilities

Type

Name

Description

Tool

get_skill_file(path)

Read file content by path (text/image/binary base64)

Resource

skill://<relative path>

One resource URI per discovered file, readable via resources/read

Prompt

skill

Returns the full skill.md text (a file parameter can specify a sub-file)

Prompt

list_skills

Returns a summary of available skill areas (file list)


Installation

cd remote_skill_mcp
pip install -r requirements.txt

Dependencies: mcp (protocol types + stdio transport + FastMCP runtime), httpx (HTTP client).


Configuration (environment variables)

Variable

Default

Description

REMOTE_SKILL_BASE_URL

http://192.168.2.6:4000

Remote service root URL

SKILL_FILE

skill.md

Skill entry file (relative to BASE_URL)

MCP_MAX_FILE_BYTES

524288 (512KB)

Maximum bytes per file; larger files are rejected

MCP_MAX_FILES

200

Upper limit on recorded files

MCP_TIMEOUT

30

Per-request HTTP timeout (seconds)

MCP_DISCOVER_DEPTH

0

Discovery depth: 0=read only skill.md (default, most economical); >=1 recurse N levels

MCP_CACHE_READS

false

Whether to cache already-read file contents (saves duplicate requests, but uses memory)


Running

Run directly (debugging)

export REMOTE_SKILL_BASE_URL=http://192.168.2.6:4000
python server.py

After startup, the server blocks waiting for stdio input.

Connecting to an MCP client

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "remote-skill": {
      "command": "python",
      "args": ["/็ปๅฏน่ทฏๅพ„/remote_skill_mcp/server.py"],
      "env": {
        "REMOTE_SKILL_BASE_URL": "http://192.168.2.6:4000"
      }
    }
  }
}

Cursor / any other stdio-MCP-capable client works the same way: launch server.py as a subprocess.


Publishing to the LobeHub MCP marketplace

This repository already includes the marketplace manifest lhm.plugin.json (with identifier/name/version/author/homepage/icon/category/tags/description/tools/prompts/resources all present).

  1. Make sure the repository is pushed to GitHub (origin = git@github.com:Congenital/remote_skill_mcp.git);

  2. Install the marketplace CLI (requires Node.js โ‰ฅ 22) and log in:

    npx -y @lobehub/market-cli login
    npx -y @lobehub/market-cli github connect
  3. Publish (reads lhm.plugin.json from the repository root):

    npx -y @lobehub/market-cli plugin publish https://github.com/Congenital/remote_skill_mcp

    For subsequent version updates: npx -y @lobehub/market-cli plugin update (just change the version in lhm.plugin.json).

The marketplace ranks by dimensions such as activity / stability / community feedback. This manifest already includes author, homepage, icon, category, tags, tools/prompts/resources, and other fields to improve the completeness score.


Testing

python tests/e2e_test.py

End-to-end tests launch the server via mcp.ClientSession and verify the full chain: initialize / tools/list / tools/call (including invalid-path errors) / resources/list / resources/read / prompts/list / prompts/get (skill + list_skills).


Directory structure

remote_skill_mcp/
โ”œโ”€โ”€ server.py            # MCP ๆœๅŠก๏ผˆFastMCP ่ฟ่กŒๆ—ถ + ๅ‘็Žฐ + ๅทฅๅ…ท/่ต„ๆบ/ๆ็คบ่ฏ๏ผ‰
โ”œโ”€โ”€ lhm.plugin.json      # LobeHub MCP ๅธ‚ๅœบๆธ…ๅ•
โ”œโ”€โ”€ pyproject.toml       # ้กน็›ฎๅ…ƒๆ•ฐๆฎ๏ผˆๅ็งฐ/็‰ˆๆœฌ/ไฝœ่€…/่ฎธๅฏ/ๅ…ฅๅฃ็‚น๏ผ‰
โ”œโ”€โ”€ LICENSE              # MIT ่ฎธๅฏ
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ README.md            # ไธญๆ–‡ๆ–‡ๆกฃ
โ”œโ”€โ”€ README.en.md         # ่‹ฑๆ–‡ๆ–‡ๆกฃ
โ””โ”€โ”€ tests/
    โ””โ”€โ”€ e2e_test.py      # ็ซฏๅˆฐ็ซฏๆต‹่ฏ•

Remote service requirements

  • An HTTP service that can statically list/download files (e.g. python -m http.server);

  • A skill.md at the root (or specify an entry file via SKILL_FILE);

  • Sub-files referenced by relative path (supports markdown links, images, bare file names, and directory name: form).


License

MIT ยฉ Congenital

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Converts AI Skills (following Claude Skills format) into MCP server resources, enabling LLM applications to discover, access, and utilize self-contained skill directories through the Model Context Protocol. Provides tools to list available skills, retrieve skill details and content, and read supporting files with security protections.
    3
    27
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    MCP server that serves agent skills (SKILL.md bundles) to any MCP client, exposing them via tools and resources for tool-oriented and resource-aware clients.
    3
    20
    ISC
  • A
    license
    Not graded
    quality
    C
    maintenance
    Serves SKILL.md-based skills as MCP resources and tools over streamable HTTP, enabling remote discovery and retrieval of skill files with full YAML frontmatter parsing.
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.

  • Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).

  • MCP server for skill documentation, generated by doc2mcp.

View all MCP Connectors

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/Congenital/remote_skill_mcp'

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