Skip to main content
Glama
LeoMbm

Malt MCP Server

by LeoMbm

Malt MCP Server

PyPI Python License

MCP server for Malt.fr. Lets Claude (or any MCP client) read your freelance profile, stats, and missions.

Install MCP Bundle uvx Docker

Tools

Tool

Description

Status

authenticate

Log in to Malt interactively from Claude Desktop

working

get_profile

Get freelance profile info (bio, daily rate, skills, rating). Omit username to fetch your own profile.

working

get_statistics

View profile stats (views, response rate, missions)

working

get_missions

List mission conversations from messaging

working

get_mission_details

Get full details of a specific mission (budget, skills, messages)

working

close_session

Close the browser and free resources

working

Related MCP server: LinkedIn MCP Server

📦 Claude Desktop MCP Bundle

Prerequisites: Claude Desktop.

One-click installation:

  1. Download the latest .mcpb from releases

  2. Double-click the .mcpb file to install it into Claude Desktop

  3. Ask Claude "connecte-moi a Malt" - a browser opens, you log in, done

  4. Call any Malt tool

No terminal needed. Session is saved in ~/.malt-mcp/ and reused across restarts.

NOTE

Google OAuth doesn't work (blocked by Google when automated). Use email/password.

🚀 uvx Setup (Universal)

Prerequisites: uv installed.

Add to your MCP client config (Claude Desktop, Claude Code, or any MCP-compatible client):

{
  "mcpServers": {
    "malt": {
      "command": "uvx",
      "args": ["malt-mcp@latest"],
      "env": { "UV_HTTP_TIMEOUT": "300" }
    }
  }
}

@latest pulls the newest version from PyPI on each launch. First auth-requiring call opens a browser for login.

To log in ahead of time:

uvx malt-mcp@latest --login

Docker (coming soon)

⚙️ CLI Options

Option

Description

--login

Open browser to log in and save session

--logout

Clear stored browser profile

--no-headless

Show browser window (debug)

--log-level

Set log level (DEBUG, INFO, WARNING, ERROR)

--timeout

Browser timeout in ms (default: 5000)

❗ Troubleshooting

Login issues:

  • Google OAuth won't work. Use email/password.

  • Session expired? Re-run uvx malt-mcp@latest --login.

  • Cloudflare challenge on first load is normal - the browser handles it, give it a few seconds.

Timeout issues:

  • Pages not loading? Try --timeout 10000. Slow connections might need 15000.

Browser issues:

  • Headless mode doesn't work - Cloudflare blocks it. The browser window is expected.

  • First run downloads Chromium (~200 MB via Patchright). One-time thing.

  • Upgrading from v0.3.x? Run uvx malt-mcp@latest --logout then --login. The browser engine changed from system Chrome to managed Chromium.

🔒 How it works

Under the hood, this is browser automation via Patchright (Playwright fork). No API, no reverse-engineering - it drives a real browser like you would.

  • Credentials stay local. Cookies live in ~/.malt-mcp/profile/, nowhere else.

  • Read-only. Nothing is modified on your Malt account (for now).

  • Runs locally. The server talks to Malt.fr and nothing else.

IMPORTANT

Malt's TOS may prohibit automated tools. Don't bulk-scrape. Use responsibly.

🐍 Development

Contributions welcome! See CONTRIBUTING.md for architecture guidelines.

git clone https://github.com/LeoMbm/malt-mcp.git
cd malt-mcp
uv sync --group dev
pre-commit install

Run the MCP Inspector (local testing):

uv run mcp dev malt_mcp_server/server.py

Run tests:

uv run pytest --cov -v

Type check:

uv run ty check

License

Apache 2.0

Available Tools

6 tools
authenticateA

Log in to Malt interactively.

Opens a browser window to the Malt login page. The user must log in manually (email/password only -Google OAuth won't work). Waits up to 5 minutes, then the session is saved for future calls.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses behavioral traits beyond annotations, such as opening a browser, manual email/password login, a 5-minute wait, and session persistence. No contradiction with annotations (readOnlyHint=false, openWorldHint=true).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief with three front-loaded sentences, each providing essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's interactive nature and side effects, the description covers all key aspects: mechanism, limitations, wait time, and session saving. An output schema exists, so return value details are not needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters in the input schema, so the description adds no parameter-specific information. According to rules, with 0 params baseline is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Log in to Malt interactively' and provides specific details about the login process, distinguishing it from sibling tools that deal with sessions, missions, or profiles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use the tool (to log in interactively) and includes a limitation about Google OAuth not working, but does not explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_sessionA
Destructive

Close the browser and free resources.

Call this when you're done with Malt tools. The next tool call will reopen the browser automatically if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include destructiveHint:true, and the description adds that it 'free resources' and explains the automatic reopening behavior. This goes beyond annotations by detailing what gets destroyed and the recovery mechanism, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is just two sentences, highly concise, and front-loaded with the core action. Every sentence serves a purpose without excess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and the presence of an output schema, the description fully covers the tool's purpose, its usage context, and the automatic reopening behavior. It is complete for an AI agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the schema provides no details. The description does not need to add parameter semantics, and with zero parameters, a baseline score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Close' and the resource 'browser', making the tool's purpose unambiguous. It distinguishes from sibling tools like authenticate and get_missions, as none of them perform session closure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this when you're done with Malt tools' and notes that the browser will reopen automatically if needed. This provides clear when-to-use guidance and future behavior, helping the AI agent decide correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_mission_detailsA
Read-only

Get details of a specific mission conversation.

Click on a conversation matching the given name and extract the project offer details: title, description, preferences, skills, and message history.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesClient name or keyword to find in the conversation list. Matches against conversation titles (case-insensitive).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description confirms the readOnly and openWorld behavior from annotations by stating it 'get details' and 'click on a conversation' (suggesting dynamic lookup). It adds context about the extracted fields but no further behavioral traits beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no superfluous content. The first sentence states the primary purpose, and the second details what is extracted. Information is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the one required parameter and presence of annotations and output schema, the description adequately covers the tool's behavior. It could mention dependency on an active session (given sibling authenticate and close_session), but that is not a critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the parameter 'name' is fully described in the schema). The description repeats the schema info (matches case-insensitive, conversation titles) without adding new semantics, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and resource 'details of a specific mission conversation', and enumerates the extracted fields (title, description, preferences, skills, message history), distinguishing it from sibling tools like get_missions (listing) and get_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (need details of a specific mission by name) and hints at the matching mechanism (case-insensitive against conversation titles). However, it does not explicitly state when not to use or provide alternative tools for different scenarios, such as get_missions for browsing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_missionsA
Read-only

Get your Malt inbox: conversations and project offers.

Returns a list of conversations and project offers sorted by date, with client name, company, last message, and status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint. The description adds behavioral details: sorted by date, returns client name, company, last message, status. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no extraneous information. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, readOnlyHint, openWorldHint, and output schema existence, the description sufficiently covers what the tool returns. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100% (empty). Baseline for 0 params is 4, and the description adds value by describing the output content, fully compensating for the lack of parameter info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves 'your Malt inbox: conversations and project offers,' which is a specific resource. It distinguishes from siblings like get_mission_details (single mission) and get_statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. The purpose implies it's for the list view, but no exclusion or context is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileB
Read-only

Get a Malt freelance profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNoMalt username (e.g., "leonidas-jeremy"). If omitted, fetches your own profile.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral details beyond what is already implied by the tool name and annotations. With readOnlyHint and openWorldHint annotations present, the description could have added context about data variability or rate limits, but it does not.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (5 words) but lacks important qualifying information. It is front-loaded but could be more informative without sacrificing brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool, the description is minimally adequate. The presence of an output schema and annotations reduces the burden, but the description still does not explain the optional username behavior or any prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description adds no parameter information beyond the schema. The baseline of 3 is appropriate as the description does not enhance understanding of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'Malt freelance profile', making the purpose unmistakable. It distinguishes from sibling tools which focus on authentication, missions, and statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention that omitting the username fetches the current user's profile; that information is only in the input schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statisticsA
Read-only

Get your Malt freelance statistics.

Returns Super Malter points, visibility stats (favorites, search appearances, profile views), project reviews/rating, and keyword rankings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true. Description adds meaningful detail about what data is returned (e.g., visibility stats, ratings), which is beneficial beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with action and result, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, readOnly hint, and existing output schema, the description sufficiently explains what the tool returns. Could explicitly state it's for the authenticated user's stats, but 'your' implies that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline 4. Description correctly adds no parameter information as none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves Malt freelance statistics and lists specific data returned (Super Malter points, visibility stats, reviews/rating, keyword rankings). Distinguishes from siblings like get_profile or get_missions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for one's own statistics but lacks explicit when-to-use or when-not-to-use guidance. No mention of prerequisites like authentication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.4.2
    • First observedauthenticate
    • First observedclose_session
    • First observedget_mission_details
    • First observedget_missions
    • First observedget_profile
    • First observedget_statistics

TDQS

A4.2/5.0
Disambiguation5/5

All six tools have clearly distinct purposes: authentication, session management, mission listing, mission details, profile retrieval, and statistics. No overlap or confusion.

Naming Consistency5/5

Tool names follow a consistent pattern using lowercase and underscores. Verbs like 'authenticate' and 'close' are appropriately paired with nouns where needed (e.g., get_mission_details, get_missions).

Tool Count5/5

With six tools, the set is well-scoped for a freelance platform. Each tool serves a necessary function without redundancy or bloat.

Completeness5/5

The tools cover the core user journey: login, browsing missions, viewing details, checking profile and stats. The set is complete for its intended read-oriented scope.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables extraction of comprehensive LinkedIn profile data including experience, education, skills, and contact information through browser automation. Requires manual LinkedIn credentials input and uses anti-detection measures for reliable scraping.
    5
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables reading public X (Twitter) content like profiles, tweets, and search results via a stealth browser, without official API costs.
    11
    MIT

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/LeoMbm/malt-mcp'

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