ecomdly
E-commerce skills for AI agents: feeds, Google Shopping, GA4. Your private Brain when signed in.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"ecomdly": {
"url": "https://ecomdly.com/mcp"
}
}
}リモートエンドポイント
https://ecomdly.com/mcpstreamable-httpできること
ツール一覧
ツール(15)
🟡search_skills(query, category)
Use this FIRST, before any non-trivial task, to find a ready-made skill in the ecomdly catalog (reviewed Markdown playbooks for AI agents). Query with 1–3 short keywords naming the kind of work (e.g. "product feed", "shopping", "ga4 funnel"); words are matched independently, so a sentence works too. If the result is empty, retry with a single noun, or send an empty query for the top skills. Returns ranked skills with their owner/name id, category, description and install command.
入力スキーマ
{
"type": "object",
"properties": {
"query": {
"description": "1–3 short keywords for the kind of work (each word is matched on its own against name, description, tags, category and author). Empty = the most popular skills.",
"type": "string"
},
"category": {
"description": "Optional category slug or name, e.g. code-review.",
"type": "string"
}
},
"required": [
"query"
]
}🟡get_skill(skill, version)
Read a skill's Markdown to inspect it (does not install anything). To install, call install_skill — it returns the file plus the exact path to write it to. Pass version to pin one.
入力スキーマ
{
"type": "object",
"properties": {
"skill": {
"description": "owner/name, e.g. cartlift/product-feed-optimizer",
"type": "string"
},
"version": {
"description": "Pin a version number; omit for latest.",
"type": "integer"
}
},
"required": [
"skill"
]
}🟡install_skill(skill, target, scope, agent)
Install a skill into the agent you are running in. Returns the complete skill file and the exact path to write it to — YOU must then create that file verbatim (Claude Code: ~/.claude/skills/<name>/SKILL.md, so it becomes available as /<name> in every project; other agents: ./skills/<name>.md) and tell the user where it is. Counts the install. Use target=hermes for Hermes Agent, target=generic for any other agent, scope=project to keep a skill inside the current Claude Code project only (.claude/skills, committable for the team). When ecomdly agent hosting is enabled and you have a hosted agent, pass agent= to install there instead.
入力スキーマ
{
"type": "object",
"properties": {
"skill": {
"description": "owner/name, e.g. cartlift/product-feed-optimizer",
"type": "string"
},
"target": {
"description": "Where the file goes: claude-code (default) → ~/.claude/skills/<name>/SKILL.md; hermes → ~/.hermes/skills/<category>/<name>/SKILL.md; generic → ./skills/<name>.md.",
"enum": [
"claude-code",
"generic",
"hermes"
],
"type": "string"
},
"scope": {
"description": "Claude Code only: user (default, ~/.claude/skills, available in every project) or project (.claude/skills in the current project — only when the user asks for a project-local install).",
"enum": [
"project",
"user"
],
"type": "string"
},
"agent": {
"description": "Hosted agent name (only when ecomdly agent hosting is enabled and you have one).",
"type": "string"
}
},
"required": [
"skill"
]
}🟢get_collection(collection)
Curated bundles of skills. Without an argument: list the available collections (slug, name, size). With a slug: the skills in that collection, in order — then call install_skill for each one the user wants (usually all).
入力スキーマ
{
"type": "object",
"properties": {
"collection": {
"description": "Collection slug, e.g. laravel-starter. Omit to list all collections.",
"type": "string"
}
}
}🟡submit_skill(name, body, category, note)
Submit a skill to ecomdly for review (needs sign-in). Creates it under your account — or a new version if you already own one with this name — runs the automated checks and the AI safety scan, and queues it for a human reviewer. Nothing is published by this tool; you get the check results back. The body must be a complete Markdown skill with a title and a "## License" section (MIT recommended).
入力スキーマ
{
"type": "object",
"properties": {
"name": {
"description": "kebab-case skill name, unique within your account",
"type": "string"
},
"body": {
"description": "Full Markdown: # title, when to use, rules, output format, ## License",
"type": "string"
},
"category": {
"description": "Category name; required for a new skill.",
"type": "string"
},
"note": {
"description": "Release note when submitting a new version of an existing skill.",
"type": "string"
}
},
"required": [
"name",
"body"
]
}🟢brain_list(brain, folder)
List the files in your Brains (named sets of private Markdown memory), including brains shared with you. Needs your agent bearer token. Returns the brain, your role in it, name, folder, size, whether the file is in the agent context and shared with members, and when it changed.
入力スキーマ
{
"type": "object",
"properties": {
"brain": {
"description": "Optional brain name; for a brain shared with you, owner-handle/name (e.g. jan/Team). Omit to list every brain.",
"type": "string"
},
"folder": {
"description": "Optional folder filter, e.g. Engineering.",
"type": "string"
}
}
}🟢brain_search(query, brain)
Use this BEFORE answering anything about the user's own context — their projects, conventions, decisions, people, infrastructure, past work. Searches the user's Brain files (their brains plus those shared with them); every word of the query is matched on its own, case-insensitively, and files are ranked by how many words hit. Returns the matching files with the surrounding lines so you can decide what to brain_get. Needs a signed-in user.
入力スキーマ
{
"type": "object",
"properties": {
"query": {
"description": "Keywords to look for; each word is matched on its own, case-insensitively.",
"type": "string"
},
"brain": {
"description": "Optional brain to search (owner-handle/name for shared brains). Omit to search all.",
"type": "string"
}
},
"required": [
"query"
]
}🟢brain_get(name, brain)
Read one Brain file by name (e.g. coding-conventions.md), across your brains and brains shared with you. Needs your agent bearer token.
入力スキーマ
{
"type": "object",
"properties": {
"name": {
"description": "File name including .md",
"type": "string"
},
"brain": {
"description": "Optional brain to read from (owner-handle/name for shared brains). Omit to search all your brains.",
"type": "string"
}
},
"required": [
"name"
]
}🟡brain_write(name, body, mode, folder, brain)
Create or update a Brain file. Writes to your default brain unless you name one; shared brains need editor access. Replaces the whole body (use mode "append" to add to the end); the previous body is kept as a version. Credentials are refused — the Brain is memory, not a vault. Needs your agent bearer token.
入力スキーマ
{
"type": "object",
"properties": {
"name": {
"description": "File name ending in .md, e.g. customer-faq.md",
"type": "string"
},
"body": {
"description": "Markdown content.",
"type": "string"
},
"mode": {
"description": "replace (default) or append.",
"type": "string"
},
"folder": {
"description": "Folder, e.g. Company. New files default to \"Agent\".",
"type": "string"
},
"brain": {
"description": "Brain to write into (owner-handle/name for shared brains, needs editor access). Omit for your default brain.",
"type": "string"
}
},
"required": [
"name",
"body"
]
}🟡brain_create(name)
Create a new Brain — a named set of private Markdown memory, e.g. for a project, a client or a store — owned by you. Then write files into it with brain_write and brain set to its name. Needs a signed-in user or a bearer token; a hosted agent may create brains while its Brain access is on, and can read and write the new brain right away.
入力スキーマ
{
"type": "object",
"properties": {
"name": {
"description": "The new brain's name, up to 60 characters, unique among your brains (e.g. \"Store ops\" or \"Client Merino\").",
"type": "string"
}
},
"required": [
"name"
]
}🟢github_repos
List the GitHub repositories you can work with: the ones the Eco GitHub App was installed on. Returns owner/name, whether it is private, the default branch and the description.
入力スキーマ
{
"type": "object",
"properties": {}
}🟢github_read(repo, path, ref)
Read a file, or list a directory, in a GitHub repository you connected. Give repo as owner/name, a path (empty for the root) and optionally a branch, tag or commit as ref. Text files up to 1 MB; binary files are refused.
入力スキーマ
{
"type": "object",
"properties": {
"repo": {
"description": "Repository as owner/name, e.g. merino-outdoor/shop-theme.",
"type": "string"
},
"path": {
"description": "File or directory path; empty for the repository root.",
"type": "string"
},
"ref": {
"description": "Branch, tag or commit; the default branch when omitted.",
"type": "string"
}
},
"required": [
"repo"
]
}🟢github_search(repo, query)
Search the code of one GitHub repository you connected (default branch only, as GitHub indexes it). Returns matching file paths with a short matching fragment. Read a file with github_read.
入力スキーマ
{
"type": "object",
"properties": {
"repo": {
"description": "Repository as owner/name.",
"type": "string"
},
"query": {
"description": "What to look for, e.g. \"product-card\" or \"shipping_price\".",
"type": "string"
}
},
"required": [
"repo",
"query"
]
}🟡github_create_issue(repo, title, body)
Open an issue in a GitHub repository you connected: a finding, a proposal or a to-do for the team. The issue says it came from Eco. Nothing in the code changes.
入力スキーマ
{
"type": "object",
"properties": {
"repo": {
"description": "Repository as owner/name.",
"type": "string"
},
"title": {
"description": "Issue title.",
"type": "string"
},
"body": {
"description": "Issue body in Markdown.",
"type": "string"
}
},
"required": [
"repo",
"title"
]
}🟡github_propose_change(repo, title, body, base, files)
Propose a change to a GitHub repository you connected as a pull request: creates a new eco/… branch from the base branch, commits the files you give (full new content per file) and opens a pull request for a person to review and merge. Never writes to an existing branch.
入力スキーマ
{
"type": "object",
"properties": {
"repo": {
"description": "Repository as owner/name.",
"type": "string"
},
"title": {
"description": "Pull request title.",
"type": "string"
},
"body": {
"description": "Pull request description in Markdown: what changes and why.",
"type": "string"
},
"base": {
"description": "Branch to merge into; the default branch when omitted.",
"type": "string"
},
"files": {
"description": "The files to create or replace, each with its full new content.",
"items": {
"properties": {
"path": {
"description": "Path inside the repository.",
"type": "string"
},
"content": {
"description": "The complete new content of the file.",
"type": "string"
}
},
"type": "object",
"required": [
"path",
"content"
]
},
"type": "array"
}
},
"required": [
"repo",
"title",
"files"
]
}コミュニティ
エビデンス