Jarvis MCP
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., "@Jarvis MCPlet's talk"
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.
Jarvis MCP
Bring your AI to life—talk to assistants instantly in your browser. Compatible with Claude Desktop, OpenCode, and other MCP-enabled AI tools.
✅ No extra software, services, or API keys required—just open the web app in your browser and grant microphone access.
Features
🎙️ Voice Conversations - Speak naturally with AI assistants
🌍 30+ Languages - Speech recognition in multiple languages
📱 Remote Access - Use from phone/tablet while AI runs on computer
⚙️ Smart Controls - Collapsible settings, always-on mode, custom voices
⏱️ Dynamic Timeouts - Intelligent wait times based on response length
🧰 Zero Extra Software - Runs entirely in your browser—no extra installs or API keys
🔌 Optional Whisper Streaming - Plug into a local Whisper server for low-latency transcripts
Related MCP server: livechat-mcp
Easy Installation
🚀 One-Command Setup
Claude Desktop:
npx @shantur/jarvis-mcp --install-claude-config
# Restart Claude Desktop and you're ready!OpenCode (in current project):
npx @shantur/jarvis-mcp --install-opencode-config --local
npx @shantur/jarvis-mcp --install-opencode-plugin --local
# Start OpenCode and use the converse toolClaude Code CLI:
npx @shantur/jarvis-mcp --install-claude-code-config --local
# Start Claude Code CLI and use voice tools🤖 Why Install the OpenCode Plugin?
Stream voice messages into OpenCode even while tools are running or tasks are in progress.
Auto-forward pending Jarvis MCP conversations so you never miss a user request.
Works entirely locally—no external services required, just your OpenCode project and browser.
Installs with one command and stays in sync with the latest Jarvis MCP features.
📦 Manual Installation
From NPM:
npm install -g @shantur/jarvis-mcp
jarvis-mcpFrom Source:
git clone <repository-url>
cd jarvis-mcp
npm install && npm run build && npm startHow to Use
Hook it into your AI tool – Use the install command above for Claude Desktop, OpenCode, or Claude Code so the MCP server is registered.
Kick off a voice turn – Call the
conversetool from your assistant; Jarvis MCP auto-starts in the background and pops openhttps://localhost:5114if needed.Allow microphone access – Approve the browser prompt the first time it appears.
Talk naturally – Continue using
conversefor every reply; Jarvis MCP handles the rest.
Voice Commands in AI Chat
Use the converse tool to start talking:
- converse("Hello! How can I help you today?", timeout: 35)Browser Interface
The web interface provides:
Voice Settings (click ⚙️ to expand)
Language selection (30+ options)
Voice selection
Speech speed control
Always-on microphone mode
Silence detection sensitivity & timeout (for Whisper streaming)
Smart Controls
Pause during AI speech (prevents echo)
Stop AI when user speaks (natural conversation)
Mobile Friendly - Works on phones and tablets
Remote Access
Access from any device on your network:
Find your computer's IP:
ifconfig | grep inet(Mac/Linux) oripconfig(Windows)Visit
https://YOUR_IP:5114on your phone/browserAccept the security warning (self-signed certificate)
Grant microphone permissions
Perfect for continuing conversations away from your desk!
Configuration
Environment Variables
export MCP_VOICE_AUTO_OPEN=false # Disable auto-opening browser
export MCP_VOICE_HTTPS_PORT=5114 # Change HTTPS port
export MCP_VOICE_STT_MODE=whisper # Switch the web app to Whisper streaming
export MCP_VOICE_WHISPER_URL=http://localhost:12017/v1/audio/transcriptions # Whisper endpoint (full path)
export MCP_VOICE_WHISPER_TOKEN=your_token # Optional Bearer auth for Whisper serverWhisper Streaming Mode
Whisper mode records raw PCM in the browser, converts it to 16 kHz mono WAV, and streams it through the built-in HTTPS proxy, so the local
whisper-serversees OpenAI-compatible requests.By default we proxy to the standard
whisper-serverendpoint athttp://localhost:12017/v1/audio/transcriptions; pointMCP_VOICE_WHISPER_URLat your own host/port if you run it elsewhere.The UI keeps recording while transcripts are in flight and ignores Whisper’s non-verbal tags (e.g.
[BLANK_AUDIO],(typing)), so only real speech is queued.To enable it:
Run your Whisper server locally (e.g.
whisper-serverfrompfrankov/whisper-server).Set the environment variables above (
MCP_VOICE_STT_MODE=whisperand the fullMCP_VOICE_WHISPER_URL).Restart
jarvis-mcpand hard-refresh the browser (empty-cache reload) to load the streaming bundle.Voice status (
voice_status()tool) now reports whether Whisper or browser STT is active.
Ports
HTTPS: 5114 (required for microphone access)
HTTP: 5113 (local access only)
Requirements
Node.js 18+
Google Chrome (only browser tested so far)
Microphone access
Optional: Local Whisper server (like
pfrankov/whisper-server) if you want streaming STT viaMCP_VOICE_STT_MODE=whisper
Troubleshooting
Certificate warnings on mobile?
Tap "Advanced" → "Proceed to site" to accept self-signed certificate
Microphone not working?
Ensure you're using HTTPS (not HTTP)
Check browser permissions
Try refreshing the page
AI not responding to voice?
Make sure the
conversetool is being used (not justspeak)Check that timeouts are properly calculated
Development
npm install
npm run build
npm run dev # Watch mode
npm run start # Run serverLicense
MIT
Available Tools
5 toolsconverseA
Have a voice conversation with the user - speak text and wait for voice response. Automatically starts browser interface if not running. IMPORTANT: Once you start using converse, first use text AND then converse for all responses in this conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to speak to the user | |
| timeout | Yes | REQUIRED: Time to wait for voice input in seconds. Calculate as: estimated speech duration + at least 120 seconds of user-response buffer. Examples: ~30s speech → 150s timeout; ~45s speech → 165s; ~60s speech → 180s. | |
| wait_for_response | No | Whether to wait for voice input from user (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and adds useful behavioral detail: it 'Automatically starts browser interface if not running' and imposes a conversation-mode rule. It does not explain timeout failure behavior or the wait_for_response=false case, but the schema covers the timeout formula and the core behavior is disclosed.
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 three sentences, front-loaded with purpose, followed by operational context and an important protocol note. There is no wasted content and each sentence earns its place.
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?
The description plus schema are sufficient for selecting and invoking the tool: purpose, auto-start behavior, required timeout calculation, and a conversation protocol rule are all present. It lacks explicit cross-references to sibling tools, but the tool is simple enough that this does not create a major 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%, so the baseline is 3. The description adds no parameter-specific meaning beyond the schema; the schema already provides detailed timeout calculation guidance and wait_for_response semantics.
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 a specific verb+resource: 'Have a voice conversation with the user - speak text and wait for voice response.' This distinguishes it from siblings like speak (which likely only outputs speech) and get_voice_input (which likely only captures input). The automatic browser start is additional scope context.
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 clear context for use: it is for voice conversation and includes a protocol rule: 'Once you start using converse, first use text AND then converse for all responses in this conversation.' It does not explicitly name alternatives or exclusion cases, but the purpose and protocol give enough guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
end_conversationA
End the voice conversation by saying goodbye and stopping the browser interface
| Name | Required | Description | Default |
|---|---|---|---|
| good_bye | Yes | The goodbye message to speak before ending the conversation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses two key behaviors: speaking a goodbye message and stopping the browser interface. While it doesn't mention reversibility or side effects, the terminal nature of ending a conversation is well conveyed.
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 a single sentence of 11 words, front-loaded with the main purpose and method. Every word earns its place with no filler or 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 simplicity (one required parameter, no output schema), the description is adequately complete. It explains what the tool does, how it does it, and the parameter is documented in schema. Minor gap: no mention of prerequisites or post-conditions, but overall sufficient.
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% with the parameter 'good_bye' already described as 'The goodbye message to speak before ending the conversation'. The description adds no additional semantic value beyond the schema, so a 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 has a specific verb and resource: 'End the voice conversation' with clear method 'by saying goodbye and stopping the browser interface'. It clearly distinguishes from siblings like speak, converse, and get_voice_input by indicating this is the termination action.
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?
Although no explicit alternatives are named, the description clearly implies this tool is for ending the conversation, which is contextually distinct from the sibling tools. The phrase 'End the voice conversation' directly indicates the when-to-use scenario, and the method gives additional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_voice_inputA
Get pending voice input from users (auto-delivered by default)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions 'pending' and 'auto-delivered by default', but fails to describe return values, side effects (e.g., whether calling clears the queue), or whether it blocks for input. This is a significant gap for an unannotated tool.
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 a single, front-loaded sentence that includes the core action and a useful parenthetical note. Every word earns its place, with zero 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?
For a simple getter with no parameters and no output schema, the description conveys the basic functionality but lacks context about the delivery mechanism, what constitutes 'pending', and how this interacts with auto-delivery. It is minimally sufficient but not thorough.
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 input schema has no parameters (0 params), so the baseline is 4. The description does not need to explain parameters, and it adds no parameter-related meaning beyond the schema, but also does not detract from it.
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 'Get pending voice input from users' clearly states a specific verb (get) and resource (pending voice input). It distinguishes itself from sibling tools like 'speak' (output) and 'voice_status' (status) by focusing on retrieving input.
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 phrase '(auto-delivered by default)' implies that this tool may be used for manually retrieving input when auto-delivery is not active, but it does not explicitly state when to use it instead of alternatives like 'voice_status' or 'converse'. No exclusions or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
speakA
Speak text using browser text-to-speech. Automatically starts browser interface if not running.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to speak aloud |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the side-effect of automatically starting the browser interface, which is useful, but with no annotations it doesn't cover return values, blocking behavior, or error conditions.
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 focused sentences, front-loaded with the action, 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?
For a simple one-parameter tool with a clear schema, the description covers the key behavior and side effect; it's sufficient for an 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?
Schema already fully describes the text parameter, and the description adds no additional meaning beyond restating that text is spoken.
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 uses a specific verb 'Speak' and identifies the resource 'text using browser text-to-speech', making the action clear and distinguishing it from sibling tools like voice_status and get_voice_input.
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?
It implies the tool is for speaking text aloud but does not explicitly state when to use it versus alternatives, nor provide exclusions or prerequisites beyond noting the browser auto-start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
voice_statusB
Get current voice system status and pending voice input
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure, but it only states what data is retrieved. It does not indicate side effects, whether pending input is consumed, or any permissions. The phrase 'pending voice input' hints at state, but lacks detail.
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 a single concise sentence that is front-loaded with the action. It contains no fluff, though it could be slightly more informative.
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?
The tool has no parameters and no output schema, so the description minimally covers the return content. However, it lacks context about the voice system's behavior, such as whether calling this affects pending input, making it only minimally complete.
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 zero parameters, so the baseline is 4. The description logically does not need to explain parameter semantics when 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?
The description uses a specific verb ('Get') and resource ('voice system status and pending voice input'), making the tool's function clear. It partially distinguishes from sibling 'get_voice_input' by focusing on status rather than the input itself, though the overlap is not fully addressed.
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 guidance is provided on when to use this tool versus alternatives like 'get_voice_input' or 'speak'. There is no mention of typical scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, though speak and converse overlap (converse includes speaking plus waiting for input). voice_status and get_voice_input are related but clearly different in scope. Descriptions help resolve ambiguity.
Tool names mix single-word verbs (speak, converse) with noun-based names (voice_status) and verb_noun phrases (get_voice_input, end_conversation). No consistent pattern, but the naming remains readable and intuitive.
Five tools is a well-scoped set for a voice interaction server. Each tool serves a clear function in the conversation lifecycle without unnecessary bloat.
The core voice lifecycle is covered: speaking, receiving input, full conversation, and ending. Minor gaps exist, such as not having a dedicated 'listen only' tool or explicit browser start control, but the automatic startup and status check mitigate these.
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
Voice and chat for AI agents — Discord, Teams, Meet, Slack, Zoom, Telegram, WhatsApp, NC Talk, SIP
Transcribe audio & video to text for AI agents: 100+ languages, speaker labels, webhooks.
AI agents that join live Google Meet, Teams, and Zoom calls as speaking participants.
Generate AI images, videos, music, SFX & speech in any AI assistant. Results appear inline in chat.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceLets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.132MIT
- AlicenseNot gradedqualityDmaintenanceEnables continuous voice conversation with AI coding assistants by locally transcribing speech with Whisper and delivering utterances as text prompts.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to speak and listen in real-time with interruption handling, using local ML models and hot-swappable adapters.14MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to have voice conversations and screen sharing capabilities via WebRTC, using Pipecat for speech-to-text and text-to-speech.BSD 2-Clause "Simplified"
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/shantur/jarvis-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server