Koskamo

Hex.pm MCP

An open-source MCP server that allows AI agents to query the Hex.pm package registry and Hexdocs documentation. It provides tools to search for Elixir/Erlang packages, inspect package details, compare versions, and audit dependencies for quality, security, or upgrade opportunities. It supports multiple MCP protocol revisions and can be run as a standalone binary or via a public instance.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Hex.pm MCP logo, by joshrotenbergCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by joshrotenberg
MCP endpoint (Streamable HTTP)
https://hexpm-mcp.fly.dev/mcp
Vendor documentation

What its tools do

24 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

24 of 24 have a description · 0 of 24 declare behavior hints · 23 of 23 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for Elixir and Erlang packages on hex.pm
  • Inspect package details and documentation from hexdocs.pm
  • Audit dependencies for security vulnerabilities or quality issues
  • Compare package versions to identify upgrade paths

Source and maintenance

Community listingRegistry 0.3.1
Maintenance checked

Protocol and capabilities

Server
hexpm-mcp 0.3.10
MCP protocol negotiated in check
2025-11-25
Tools
24 advertised
Resources
1 advertised
Resource templates
4 advertised
Prompts
6 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {},
  "completions": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Package data for the Elixir and Erlang ecosystem: hex.pm packages, releases, owners and downloads; HexDocs module and function documentation; OSV.dev security advisories; and the curated Elixir Toolbox catalog. Use it when choosing, evaluating, upgrading or auditing a Hex dependency, and to read a package's API on HexDocs instead of recalling it. Where to start: - Find packages: search, toolbox_search, toolbox_groups, toolbox_trending. - Evaluate one: health, then audit, compare, alternatives or dep_tree. - A project's dependencies: audit_mix_deps and upgrade_check take the deps list from mix.exs as text. - API lookups: docs lists a package's modules, search_docs finds an item, doc_item returns a module's documentation. Pass the version the project locks. Resources: hex://{name}/info, hex://{name}/readme, hex://{name}/docs, toolbox://groups, toolbox://{group}/{category}.

Tools

24 advertised

alternatives
Advertised by the server during the last successful anonymous check.

Find alternative packages

alternatives input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    }
  }
}
alternatives annotations
{}
audit
Advertised by the server during the last successful anonymous check.

Audit package dependencies for risks

audit input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Release version (defaults to latest)"
    }
  }
}
audit annotations
{}
audit_mix_deps
Advertised by the server during the last successful anonymous check.

Audit mix.exs dependencies for risks

audit_mix_deps input schema
{
  "type": "object",
  "required": [
    "deps"
  ],
  "properties": {
    "deps": {
      "type": "string",
      "description": "Mix.exs deps list as text, e.g. {:phoenix, \"~> 1.7\"}, {:ecto, \"~> 3.10\"}"
    }
  }
}
audit_mix_deps annotations
{}
compare
Advertised by the server during the last successful anonymous check.

Compare 2-5 packages side by side

compare input schema
{
  "type": "object",
  "required": [
    "packages"
  ],
  "properties": {
    "packages": {
      "type": "string",
      "description": "Comma-separated list of package names (2-5 packages)"
    }
  }
}
compare annotations
{}
dep_tree
Advertised by the server during the last successful anonymous check.

Build a package dependency tree

dep_tree input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Release version (defaults to latest)"
    },
    "max_depth": {
      "type": "integer",
      "description": "Maximum depth to traverse (default 5, max 5)"
    }
  }
}
dep_tree annotations
{}
dependencies
Advertised by the server during the last successful anonymous check.

Get dependencies for a package version

dependencies input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Release version (defaults to latest)"
    }
  }
}
dependencies annotations
{}
doc_item
Advertised by the server during the last successful anonymous check.

Get documentation for a module or function

doc_item input schema
{
  "type": "object",
  "required": [
    "name",
    "module"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "module": {
      "type": "string",
      "description": "Module name (e.g. \"Plug.Conn\")"
    },
    "version": {
      "type": "string",
      "description": "Package version (defaults to latest)"
    }
  }
}
doc_item annotations
{}
docs
Advertised by the server during the last successful anonymous check.

Browse a package documentation module listing

docs input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Package version (defaults to latest)"
    }
  }
}
docs annotations
{}
downloads
Advertised by the server during the last successful anonymous check.

Get package download statistics

downloads input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    }
  }
}
downloads annotations
{}
features
Advertised by the server during the last successful anonymous check.

Get optional features for a package release

features input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Release version (defaults to latest)"
    }
  }
}
features annotations
{}
health
Advertised by the server during the last successful anonymous check.

Run a comprehensive package health check

health input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    }
  }
}
health annotations
{}
info
Advertised by the server during the last successful anonymous check.

Get detailed package information

info input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    }
  }
}
info annotations
{}
owners
Advertised by the server during the last successful anonymous check.

Get package owners and maintainers

owners input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    }
  }
}
owners annotations
{}
readme
Advertised by the server during the last successful anonymous check.

Get package README content

readme input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Package version (defaults to latest)"
    }
  }
}
readme annotations
{}
release
Advertised by the server during the last successful anonymous check.

Get detailed package release information

release input schema
{
  "type": "object",
  "required": [
    "name",
    "version"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "version": {
      "type": "string",
      "description": "Release version (e.g. \"1.8.5\")"
    }
  }
}
release annotations
{}
search
Advertised by the server during the last successful anonymous check.

Search hex.pm packages

search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "description": "Page number (default 1)"
    },
    "sort": {
      "type": "string",
      "description": "Sort by: name, recent_downloads, total_downloads, inserted_at, updated_at"
    },
    "query": {
      "type": "string",
      "description": "Search query string"
    }
  }
}
search annotations
{}
search_docs
Advertised by the server during the last successful anonymous check.

Search within package documentation

search_docs input schema
{
  "type": "object",
  "required": [
    "name",
    "query"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    },
    "query": {
      "type": "string",
      "description": "Search query"
    },
    "version": {
      "type": "string",
      "description": "Package version (defaults to latest)"
    }
  }
}
search_docs annotations
{}
toolbox_category
Advertised by the server during the last successful anonymous check.

List projects in a Toolbox category

toolbox_category input schema
{
  "type": "object",
  "required": [
    "group",
    "category"
  ],
  "properties": {
    "sort": {
      "type": "string",
      "description": "Ordering: \"name\" (alphabetical) or \"downloads\"; defaults to popularity order"
    },
    "group": {
      "type": "string",
      "description": "Group slug (e.g. \"web\", \"ai\")"
    },
    "category": {
      "type": "string",
      "description": "Category slug within the group (e.g. \"frameworks\")"
    }
  }
}
toolbox_category annotations
{}
toolbox_group
Advertised by the server during the last successful anonymous check.

List categories in a Toolbox group

toolbox_group input schema
{
  "type": "object",
  "required": [
    "group"
  ],
  "properties": {
    "group": {
      "type": "string",
      "description": "Group slug (e.g. \"web\", \"ai\")"
    }
  }
}
toolbox_group annotations
{}
toolbox_groups
Advertised by the server during the last successful anonymous check.

Browse the Elixir Toolbox taxonomy

toolbox_groups input schema
{
  "type": "object"
}
toolbox_groups annotations
{}
toolbox_search
Advertised by the server during the last successful anonymous check.

Search packages through Elixir Toolbox

toolbox_search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query string"
    }
  }
}
toolbox_search annotations
{}
toolbox_trending
Advertised by the server during the last successful anonymous check.

List trending Elixir packages

toolbox_trending input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Maximum number of projects to return"
    }
  }
}
toolbox_trending annotations
{}
upgrade_check
Advertised by the server during the last successful anonymous check.

Check mix.exs dependencies for upgrades

upgrade_check input schema
{
  "type": "object",
  "required": [
    "deps"
  ],
  "properties": {
    "deps": {
      "type": "string",
      "description": "Mix.exs deps list as text, e.g. {:phoenix, \"~> 1.7\"}, {:ecto, \"~> 3.10\"}"
    }
  }
}
upgrade_check annotations
{}
versions
Advertised by the server during the last successful anonymous check.

List all package versions

versions input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Package name on hex.pm"
    }
  }
}
versions annotations
{}

Prompts

6 advertised

analyze_package

Advertised by the server during the last successful anonymous check.

Comprehensive analysis of a package's quality, maintenance, popularity, and alternatives

name
Package name on hex.pm (required)
compare_packages

Advertised by the server during the last successful anonymous check.

Compare multiple hex.pm packages side by side

names
Comma-separated package names (2-5) (required)
evaluate_dependencies

Advertised by the server during the last successful anonymous check.

Evaluate a set of hex.pm dependencies for health and security

deps
Comma-separated package names (required)
migration_guide

Advertised by the server during the last successful anonymous check.

Guide a migration from one hex.pm package to another

from
Package to migrate from (required)
to
Package to migrate to (required)
package_review

Advertised by the server during the last successful anonymous check.

Choose a review focus and prepare a read-only package investigation

name
Package name on hex.pm (required)
focus
quality, security, or upgrade; asks when omitted, or covers all three
recommend_packages

Advertised by the server during the last successful anonymous check.

Find and evaluate hex.pm packages for a given use case

use_case
What you need a package for (required)

Resources

1 advertised

toolbox_groups

Advertised by the server during the last successful anonymous check.

The Elixir Toolbox curated taxonomy of groups and categories

toolbox_groups URI
toolbox://groups

MIME type: application/json

package_docs

Advertised by the server during the last successful anonymous check.

Get documentation module listing for a hex.pm package

package_docs URI template
hex://{name}/docs

MIME type: application/json

package_info

Advertised by the server during the last successful anonymous check.

Get package metadata from hex.pm

package_info URI template
hex://{name}/info

MIME type: application/json

package_readme

Advertised by the server during the last successful anonymous check.

Get README content for a hex.pm package

package_readme URI template
hex://{name}/readme

MIME type: text/markdown

toolbox_category

Advertised by the server during the last successful anonymous check.

Curated projects in an Elixir Toolbox category

toolbox_category URI template
toolbox://{group}/{category}

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
800 ms
95th percentile latency
800 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 800 ms · metadata changed · 24 tool(s), 1 resource(s), 4 resource template(s), 6 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http hex-pm-mcp-fly https://hexpm-mcp.fly.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add hex-pm-mcp-fly --url https://hexpm-mcp.fly.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable hex-pm-mcp-fly in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "hex-pm-mcp-fly": {
      "url": "https://hexpm-mcp.fly.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "hex-pm-mcp-fly": {
      "type": "streamableHttp",
      "url": "https://hexpm-mcp.fly.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start hex-pm-mcp-fly and inspect its tools.
VS Code configuration
{
  "servers": {
    "hex-pm-mcp-fly": {
      "type": "http",
      "url": "https://hexpm-mcp.fly.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http hex-pm-mcp-fly https://hexpm-mcp.fly.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://hexpm-mcp.fly.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "hex-pm-mcp-fly": {
      "serverUrl": "https://hexpm-mcp.fly.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Hex.pm MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.