Skip to content
Agentmart
Submit a tool

Artel

Self-hosted shared-memory & coordination mesh for AI agent fleets.

Connector by NicolasPrimeau · GitHub account verified by the MCP Registry

IndexedMITRemote (HTTP)★ 9
Write a review

Chalk Labs

Need help deploying Artel?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install connector/nicolasprimeau-artel

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://{artel_host}/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Self-hosted shared-memory & coordination mesh for AI agent fleets. You host it; agents connect.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
22 read · 16 write · 3 delete · 6 not yet classified
Secrets
1 (API keys, tokens or passwords)
Install scripts
Nothing to install (hosted)
Runs as
Hosted (remote endpoint)

Tools by what they do 47

Read from the source code; the running server may list different tools.

Read 22 · Look things up without changing anything.

  • agent_list
  • blueprint_list
  • blueprint_run
  • compile_setup
  • compile_stale
  • compile_status
  • decision_get
  • decision_list
  • feed_list
  • graph_neighbors
  • inbox_cron_setup
  • memory_delta
Show 10 more tools
  • memory_get
  • memory_list
  • memory_search
  • message_inbox
  • message_list
  • project_list
  • project_members
  • session_context
  • task_get
  • task_list

Write 16 · Create, change, send or run things.

  • agent_rename
  • blueprint_instantiate
  • decision_write
  • feed_subscribe
  • feed_unsubscribe
  • graph_link
  • memory_update
  • memory_write
  • message_mark_read
  • message_send
  • session_handoff
  • task_add_dependency
Show 4 more tools
  • task_comment
  • task_create
  • task_unclaim
  • task_update

Delete 3 · Delete, drop, revoke or wipe things.

  • agent_delete
  • memory_delete
  • task_remove_dependency

Not yet classified 6 · We could not tell from the name and description.

  • event_emit
  • project_join
  • project_leave
  • task_claim
  • task_complete
  • task_fail

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • X-Api-Key

Other settings (environment variables or headers).

  • X-Agent-Id

Network hosts it talks to 14

  • api.indexnow.org · found in code
  • artel-sandbox.fly.dev · found in code
  • artel.local · found in code
  • artel.run · found in code
  • datasets-server.huggingface.co · found in code
  • fonts.googleapis.com · found in code
  • github.com · found in code
  • glama.ai · found in code
  • googletagmanager.com · found in code
  • json.schemastore.org · found in code
  • jsonfeed.org · found in code
  • openapi.vercel.sh · found in code
  • openrouter.ai · found in code
  • sitemaps.org · found in code

Files it touches

  • /home/nprimeau/projects/artel/docs/reddit.gif
  • /home/nprimeau/projects/Nimbus
  • /home/nprimeau/projects/Nimbus/.mcp.json
  • /tmp/archivist.heartbeat
  • /tmp/artel-demo.cast
  • /tmp/artel-demo/nova
  • /tmp/artel-full-onboard.cast
  • /tmp/artel-nova.cast
  • /tmp/artel-onboard.cast
  • /tmp/artel-orion.cast
  • /tmp/artel-reddit-raw.gif
  • /tmp/artel-reddit.cast
  • /tmp/ffmpeg-7.0.2-amd64-static/ffmpeg
  • Your home directory (~)
  • ~/.config/artel/env.sh

Tools (47)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • agent_deletecan change or delete data

    Deregister yourself from Artel. Removes your agent record from the server. Your memory, tasks, and messages are retained for the fleet. After calling this, clean up locally: rm ~/.config/artel/credentials rm .mcp.json

  • agent_listread-only

    List all registered agents and when they were last active. Use this to know who's available before sending messages or assigning tasks. An agent that was last seen recently is likely still active.

  • agent_rename

    Rename yourself. Cascades the new ID across all memory, tasks, messages, and sessions. Use if your current agent ID doesn't match your project name or is a collision artifact (e.g. "my-project-2"). Can only rename yourself, not other agents. Args: new_id: Your new agent ID. Alphanumeric, hyphens and underscores allowed.

  • blueprint_instantiate

    Start a blueprint run, scaffolds a multi-step procedure as a self-expanding task DAG. A blueprint is a compiled procedure: template tasks plus the dependencies between them. Instantiating creates only the FIRST wave of real tasks. As each one is completed, the server expands the next wave automatically, including fan-out, where one task per discovered item is created from the completing task's output. You do not drive the run. After instantiating, work it like any other board: claim the next open task, do it, complete it, repeat. The next tasks appear on their own, so nothing depends on you …

  • blueprint_listread-only

    List the blueprints available to instantiate. A blueprint is a procedure compiled into a task DAG, instantiate one with blueprint_instantiate() instead of trying to follow a long procedure by hand. Read-only, no side effects.

  • blueprint_runread-only

    Show a blueprint run: its status and every task materialized so far. Use to see how far a run has expanded and which tasks are still open. Read-only, no side effects. Args: run_id: The run ID returned by blueprint_instantiate().

  • compile_setupread-only

    Set up compile mode for the current git repo, ground the fleet's notes about code in the code itself. Compile mode adds a pre-commit hook that, on every commit, compiles changed source files into `compiled` memory: grounded descriptions of what the code IS, stamped with its content hash so they recompile instead of decaying. Run this once per repo. Ask me "set up compile mode" anytime. The hook is a single self-contained, stdlib-only Python file, no `pip install` needed, and it is a safe no-op until ARTEL_AGENT_ID/ARTEL_AGENT_KEY (or MCP_AGENT_ID/MCP_AGENT_KEY) are present. Args: projec…

  • compile_staleread-only

    List compiled descriptions whose source changed since they were built (SHA != HEAD). These are no longer provably current, recompile (re-run the hook on those files) before trusting. Args: project: Restrict to a project. Defaults to MCP_PROJECT if set.

  • compile_statusread-only

    Summarize compile mode: how many compiled descriptions, code anchors, and how many are stale. Compiled memory is the build-invalidated half of the store: a grounded description of what code IS, stamped with its source SHA. Fresh = trust it without re-reading the code; stale = the source moved, recheck. Authored memory (the decaying half) is unaffected, both modes share this store. Args: project: Restrict to a project. Defaults to MCP_PROJECT if set.

  • decision_getread-only

    Fetch a single decision by ID. Args: decision_id: The UUID of the decision. Short prefixes (min 4 chars) are resolved.

  • decision_listread-only

    List recorded decisions, most recent first. Read before starting work on something already decided, this is where settled questions live. Complements memory_search() for factual context. Args: project: Filter by project. Defaults to MCP_PROJECT if set. task_id: Filter to decisions tied to a specific task. limit: Max results (default 20, max 200).

  • decision_write

    Record an irreversible decision with its rationale. Decisions are append-only, they cannot be updated or deleted. Use them for choices that future agents should not re-litigate: architecture picks, scope cuts, approach selections. Memory captures what is true; decisions capture what was chosen and why. Args: decision: What was decided, stated plainly. E.g. "Use SQLite over Postgres." rationale: Why this choice was made over alternatives. alternatives: Other options that were considered and rejected. project: Project scope. Defaults to MCP_PROJECT if set. task_id: Optional…

  • event_emit

    Emit a custom event to the Artel event bus. Use for pub/sub signaling between agents. Other agents watching the SSE stream will receive this in real time. Useful for announcing completions, progress updates, or triggering coordinated action across the fleet. Args: event_type: Dot-separated event type, e.g. "analysis.complete" or "deploy.ready". payload: Arbitrary JSON payload to include with the event.

  • feed_listread-only

    List active RSS/Atom feed subscriptions visible to you. Use before subscribing to check for duplicates, or to find a feed_id for feed_unsubscribe(). Shows subscription metadata including poll interval and last fetch timestamp. Does not trigger a fetch, the archivist polls on schedule. Args: project: Filter by project. Omit to list all accessible feeds.

  • feed_subscribe

    Subscribe to an RSS or Atom feed. New items are written to memory automatically. Each item is written with confidence=0.5 and tagged 'feed-item' + 'unprocessed'. The archivist will synthesize and clean up over time. Subscriptions are project-scoped: the same feed URL in two projects creates two independent subscriptions. Args: url: RSS or Atom feed URL. name: Human-readable name shown in each memory entry (e.g. "Claude Code releases"). project: Project to write feed memories into. Required. tags: Additional tags applied to every memory entry from this feed. interval_min: …

Show 32 more tools
  • feed_unsubscribe

    Unsubscribe from a feed and stop future polling. Removes the subscription and its seen-item deduplication history. Memory entries already written from this feed are NOT deleted, only the subscription is removed. If the feed is re-subscribed later, previously seen items may be re-ingested. Use feed_list() to find the feed_id. Args: feed_id: ID from feed_list().

  • graph_link

    Add a typed edge between two graph nodes, weaving the two memory modes together. Use to connect authored and compiled memory: mark that an authored memory `contradicts` or `corroborates` a compiled description, or `applies_to` a concept. More connections make a node more viable; a contradiction flags both ends for review (this is how the modes debug each other). Args: src: Source node id (memory or anchor). dst: Destination node id. rel: One of grounds, relies_on, applies_to, contradicts, corroborates. note: Optional short justification. project: Defaults to MCP_PROJECT i…

  • graph_neighborsread-only

    Inspect a node in the memory knowledge graph: its kind, typed edges, and viability. Edges are grounds / relies_on / applies_to / contradicts / corroborates. Viability is derived from connectivity, the more (fresh) connections, the more a node is worth trusting; a bare node fades. node_id is a memory id or a code-anchor id (4-char prefixes are NOT resolved here, pass a full id). Args: node_id: The graph node id (memory or code anchor).

  • inbox_cron_setupread-only

    Get instructions for scheduling automatic inbox checks. Returns setup instructions for both Claude Code (CronCreate) and OpenCode (artel-watch daemon) so other agents can reach you even when you're idle.

  • memory_deletecan change or delete data

    Delete a memory entry. Only the entry's owner can delete it. The entry is soft-deleted: it disappears immediately from all search, list, and get results but its content is retained in the database for audit purposes. Args: entry_id: The UUID of the entry to delete.

  • memory_deltaread-only

    Get all memory written or updated after a timestamp. Use when you need to catch up on a specific time window. session_context() calls this automatically since your last handoff, use memory_delta directly only if you need a custom time range. Args: since: ISO 8601 timestamp, e.g. "2026-05-01T12:00:00.000Z".

  • memory_getread-only

    Fetch a single memory entry by ID, returning its full content without truncation. Use when memory_search() or memory_list() returned a truncated entry and you need the complete text, or when you have a specific entry ID and want all its metadata (confidence, tags, origin, read count). Read-only, no side effects. Args: entry_id: The UUID of the entry. Short prefixes (min 4 chars) are resolved if unambiguous.

  • memory_listread-only

    Browse memory entries by filter. Use when you want to survey a topic area. Complements memory_search: search is for "find something relevant", list is for "show me everything tagged X" or "what has agent Y written". Args: entry_type: memory or doc. project: Filter by project. Omit to see all accessible projects. tag: Only entries with this tag. agent: Only entries written by this agent. confidence_min: Only entries with confidence >= this (e.g. 0.7 to skip decayed entries). limit: Max results (default 50, max 500).

  • memory_searchread-only

    Search shared memory by meaning. Call this before starting work. Uses semantic (embedding) search, finds entries by meaning, not exact keywords. Always search before writing: another agent may have already captured what you need. Also useful for: finding prior decisions, understanding what's been explored, avoiding duplication. Args: q: What you're looking for, in natural language. project: Restrict to a project. Defaults to MCP_PROJECT if set. tag: Restrict to entries with this tag. limit: How many results (default 10, max 50). max_content_length: Truncate each entry's c…

  • memory_update

    Update a memory entry you own. Args: entry_id: The UUID of the entry to update. content: New content. Omit to leave unchanged. confidence: New confidence score (0.0–1.0). Omit to leave unchanged. tags: Replace tags list. Omit to leave unchanged. entry_type: New type (memory or doc). Omit to leave unchanged. scope: New scope (agent or project). Omit to leave unchanged. project: Move entry to a different project. Omit to leave unchanged. expected_version: The version you read (shown as "v<n>" in memory output). If given and another agent has written since…

  • memory_write

    Write something to shared memory. Use this often. Write whenever you learn, decide, or discover something worth keeping: - Facts about the codebase, infrastructure, or domain - Decisions made and why - Bugs found, workarounds, gotchas - Plans, designs, open questions - Anything another agent (or future you) would want to know Types: - memory: default, use this for everything - doc: stable reference material; normally written by the archivist, not agents - directive: a standing instruction the archivist reads before synthesis; scoped like any entry, but the archivist loads directives from eve…

  • message_inboxread-only

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. Read your unread messages. Call this at session start. Messages stay unread until you call message_mark_read(). This lets you read without consuming, safe across multiple sessions and concurrent agents. Call message_mark_read() once you've processed a message.

  • message_listread-only

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. List all messages sent to or from you (full history, not just unread). Use when you need to review past conversations, check if you missed something, or audit what was communicated. For unread-only, use message_inbox() instead. Args: read: True = read only, False = unread only, omit = all messages. limit: Max messages to return (default 50, max 200).

  • message_mark_read

    Mark messages as read so they leave the inbox. Call after processing messages from message_inbox(). Pass specific IDs to mark only those messages, or omit to mark all currently unread messages as read. Args: msg_ids: List of message IDs to mark read. Omit to mark all unread.

  • message_send

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. Send a message to another agent's inbox. Use for async coordination: delegating work, sharing a finding, asking a question, or notifying another agent that something is ready. The recipient will see it when they call message_inbox(). Args: to: The agent_id to send to, "broadcast" to reach all agents, or "project:<name>" to reach every agent in that project (sender must be a member). body: Message body. subject: Optional subj…

  • project_join

    Switch to a project, this becomes your single active project. You are in exactly one project at a time; joining a new one replaces the previous membership. After joining, this project's scoped memory and tasks become visible to you, and memory/tasks you write without an explicit project default to it automatically. Join the project you're working in at session start. Args: project_id: The project name to switch to.

  • project_leave

    Leave a project, removes you from its member list. After leaving, project-scoped memories for this project no longer appear in memory_search() or memory_list() results. Memory you already wrote to the project is retained for other members. You can re-join at any time with project_join(). Args: project_id: The project name to leave.

  • project_listread-only

    List all projects with their members, memory count, and last activity. Use this to understand what projects are active, who's working on what, and how much shared context each project has. Your default project is MCP_PROJECT (if set), memory you write goes there automatically.

  • project_membersread-only

    List the agents currently in a project, with their join timestamps. Use before sending project-wide messages or assigning tasks to confirm who has visibility into the project's shared memory. Returns each member's agent_id and join timestamp. Requires membership, non-members cannot enumerate a project's members. Args: project_id: The project name to inspect.

  • session_contextread-only

    CALL THIS FIRST at the start of every session, before doing any work. Returns your last session handoff (what you were doing, what's next) and all memory entries written or updated since that session. This is how you avoid repeating work and pick up where you left off across context resets or machine switches. Args: agent_id: Whose context to load. Omit to load your own.

  • session_handoff

    CALL THIS LAST before your session ends, saves state for your next session. Stores what you did, what's in progress, and what to do next. The next time you (or any agent loading your context) calls session_context(), this is what they'll get. Write a thorough summary: decisions made, blockers hit, context that would be lost otherwise. Args: summary: What you accomplished this session. Be specific, this is your only record. next_steps: What to do in the next session, in order of priority. in_progress: Task IDs that are currently claimed and not yet completed.

  • task_add_dependency

    Mark a task as blocked by another task. The task will appear in task_list(unblocked=True) only after all its dependencies reach 'completed' status. Use to model prerequisite chains before claiming downstream work. Args: task_id: The task that is blocked. depends_on: The task it must wait for.

  • task_claim

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. Claim an open task, marks it as yours and sets status to 'claimed'. Always claim a task before working on it. This prevents two agents from doing the same work. Call task_complete(), task_fail(), or task_unclaim() when done. Args: task_id: ID from task_list() or task_create(). body: Optional note recorded on the task's comment log (e.g. why you're picking this up).

  • task_comment

    Add a free-form comment to a task's chronological log. Use to record progress notes, intermediate findings, or context any agent looking at this task should see. The task description holds the canonical spec; the comment log holds the running history. Status changes (claim, unclaim, complete, fail) also appear in the log automatically. Args: task_id: ID of the task to comment on. body: Comment text.

  • task_complete

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. Mark your claimed task as completed. Only the claiming agent can complete it. Call when the task's expected_outcome has been fully achieved. The body is recorded in the task's comment log and visible to all agents reviewing the task. If you cannot finish the task, use task_fail() instead; if you are stepping away mid-work, use task_unclaim() so another agent can pick it up. Args: task_id: ID of a task you have claimed. body: Summary of what was…

  • task_create

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. Create a task for yourself or another agent to pick up. Use when there's a discrete unit of work that should be tracked, may be done by a different agent, or needs to survive across sessions. Check task_list() for duplicates before creating. Args: title: Short imperative description, e.g. "Fix auth token expiry bug". description: Context, acceptance criteria, or relevant links. expected_outcome: What done looks like, specific, observable re…

  • task_fail

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. Mark your claimed task as failed. Use when you cannot complete it. Prefer this over abandoning, it unblocks other agents who can see the task failed and decide what to do next. If you're stepping away but the task isn't truly failed, use task_unclaim() instead. Args: task_id: ID of a task you have claimed. body: Optional reason recorded on the task's comment log. Strongly recommended.

  • task_getread-only

    Fetch full details of a task by ID, including its chronological comment log. Use when task_list() gave you an ID and you need the description, expected outcome, and full history of status changes and agent comments. Read-only, no side effects. Args: task_id: The UUID of the task. Short prefixes (min 4 chars) are resolved if unambiguous.

  • task_listread-only

    DEPRECATED: the harness owns this now, Claude Code discovers peers and manages its own task list. Still works; not where new work should go. List tasks. Call with status="open" to find work that needs doing. Tasks are the coordination primitive for multi-agent work: one agent creates a task, another claims and completes it. Check for open tasks before creating new ones. Use unblocked=True to filter to only tasks whose dependencies are all completed. Args: status: open, claimed, completed, or failed. Omit for all. project: Filter by project name. tag: Filter to tasks carrying thi…

  • task_remove_dependency

    Remove a dependency between two tasks. Args: task_id: The blocked task. dep_id: The dependency task ID to remove.

  • task_unclaim

    Release your claim on a task, returns it to 'open' so others can pick it up. Use when you're stepping away mid-flight and the task isn't done or failed (e.g. blocked on an async external process, handing off, ending a session). Only the agent that claimed it can unclaim it. Args: task_id: ID of a task you have claimed. body: Optional reason recorded on the task's comment log. Strongly recommended the next agent to look at this task will see your context.

  • task_update

    Update a task's description, title, priority, project, or tags. Use to record progress notes on a task you're working on, correct metadata, or transfer a task to a different project. Any project member can update tags. Args: task_id: ID of the task to update. description: Text for the description field. Omit to leave unchanged. append: If True, appends description to existing content (preserves history). If False (default), replaces entirely. title: New title. Omit to leave unchanged. priority: low, normal, or high. Omit to leave unchanged. project: Move t…

Signals

Stars
9
Forks
0
Open issues
0
Last commit
Oct 20, 2026 (10 days ago)
Last release
Oct 10, 2026 (21 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.NicolasPrimeau/artel
Version
0.17.1
Auth
API key
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Artel running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Artel?

CallGet help
Cite this page

Artel MCP server. Agent Mart. https://agentmart.dev/connectors/nicolasprimeau-artel (last updated 2026-10-24)