Malt MCP Server
Lets you read your freelance profile, view statistics, and manage mission conversations on Malt.fr.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Malt MCP Servershow my latest mission conversations"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Malt MCP Server
MCP server for Malt.fr. Lets Claude (or any MCP client) read your freelance profile, stats, and missions.
Tools
Tool | Description | Status |
| Log in to Malt interactively from Claude Desktop | working |
| Get freelance profile info (bio, daily rate, skills, rating). Omit username to fetch your own profile. | working |
| View profile stats (views, response rate, missions) | working |
| List mission conversations from messaging | working |
| Get full details of a specific mission (budget, skills, messages) | working |
| Close the browser and free resources | working |
Related MCP server: LinkedIn MCP Server
📦 Claude Desktop MCP Bundle
Prerequisites: Claude Desktop.
One-click installation:
Download the latest
.mcpbfrom releasesDouble-click the
.mcpbfile to install it into Claude DesktopAsk Claude "connecte-moi a Malt" - a browser opens, you log in, done
Call any Malt tool
No terminal needed. Session is saved in ~/.malt-mcp/ and reused across restarts.
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 --loginDocker (coming soon)
⚙️ CLI Options
Option | Description |
| Open browser to log in and save session |
| Clear stored browser profile |
| Show browser window (debug) |
| Set log level (DEBUG, INFO, WARNING, ERROR) |
| 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 need15000.
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 --logoutthen--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.
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 installRun the MCP Inspector (local testing):
uv run mcp dev malt_mcp_server/server.pyRun tests:
uv run pytest --cov -vType check:
uv run ty checkLicense
Available Tools
6 toolsauthenticateA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_sessionADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_detailsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Client name or keyword to find in the conversation list. Matches against conversation titles (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_missionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_profileBRead-only
Get a Malt freelance profile.
| Name | Required | Description | Default |
|---|---|---|---|
| username | No | Malt username (e.g., "leonidas-jeremy"). If omitted, fetches your own profile. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_statisticsARead-only
Get your Malt freelance statistics.
Returns Super Malter points, visibility stats (favorites, search appearances, profile views), project reviews/rating, and keyword rankings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.4.2- First observed
authenticate - First observed
close_session - First observed
get_mission_details - First observed
get_missions - First observed
get_profile - First observed
get_statistics
TDQS
All six tools have clearly distinct purposes: authentication, session management, mission listing, mission details, profile retrieval, and statistics. No overlap or confusion.
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).
With six tools, the set is well-scoped for a freelance platform. Each tool serves a necessary function without redundancy or bloat.
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
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
Automate any website: discover, run and create browser scripts that work behind logins.
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- AlicenseAqualityAmaintenanceEnables AI assistants to interact with LinkedIn by scraping profiles, companies, job postings, and getting personalized job recommendations using authenticated browser automation.173,352Apache 2.0
- AlicenseAqualityAmaintenanceEnables reading public X (Twitter) content like profiles, tweets, and search results via a stealth browser, without official API costs.11MIT
- FlicenseBqualityDmaintenanceEnables unified read-only portfolio viewing across Indian brokers (Groww, Zerodha, INDmoney) using browser automation, without paid API subscriptions.1412-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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