Files
OpenJarvis/mkdocs.yml
T
b39dbedcc4 feat: fix external MCP server integration and add streaming tool-call support
Rebased and cleaned-up version of PR #113 by @mricharz, resolved against
current main (including Codex engine, Gemini thought_signature, and
agent manager fixes merged since the original PR).

MCP Transport & Client:
- StreamableHTTPTransport with session tracking, SSE parsing, timeouts
- MCPClient.initialize() sends proper MCP handshake (protocolVersion,
  capabilities, clientInfo) + notifications/initialized
- Fix StdioTransport constructor: command=[command] + args
- MCPRequest.to_dict() with notification support (id=None)

External MCP Discovery:
- _discover_external_mcp supports both url (HTTP) and command (stdio)
- Per-server include_tools / exclude_tools filtering
- MCP clients persisted on JarvisSystem for runtime lifetime

Streaming Tool-Call Support (stream_full):
- StreamChunk dataclass in _stubs.py (content, tool_calls, finish_reason, usage)
- Default stream_full() on InferenceEngine ABC wraps stream() for backward compat
- _OpenAICompatibleEngine.stream_full() with SSE parsing
- CloudEngine: _stream_full_openai (OpenAI/OpenRouter/MiniMax/Codex routing)
               _stream_full_anthropic (event-based → OpenAI delta format)
- InstrumentedEngine, MultiEngine: stream_full delegation
- GuardrailsEngine: stream_full with post-hoc security scanning (FIXED:
  original PR bypassed output scanning — now accumulates and scans like stream())

Other improvements:
- _prepare_anthropic_messages() extracted to eliminate duplication
- Default tool_choice=auto when tools are provided (OpenAI compat engines)
- MCP tool injection into managed agent streaming path
- Documentation: docs/user-guide/mcp-external-servers.md

Tests: ~59 new tests across 8 test files, all passing.

Closes PR #113

Co-Authored-By: mricharz <mricharz@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 18:09:54 +00:00

172 lines
4.7 KiB
YAML

site_name: OpenJarvis
site_url: https://open-jarvis.github.io/OpenJarvis/
site_description: Personal AI, On Personal Devices
site_author: OpenJarvis Contributors
repo_url: https://github.com/open-jarvis/OpenJarvis
repo_name: open-jarvis/OpenJarvis
edit_uri: edit/main/docs/
copyright: Copyright &copy; 2026 OpenJarvis Contributors
theme:
name: material
custom_dir: docs/overrides
language: en
font:
text: Georgia
code: JetBrains Mono
features:
- navigation.tabs
- navigation.tabs.sticky
- navigation.sections
- navigation.top
- navigation.indexes
- navigation.footer
- search.suggest
- search.highlight
- content.code.copy
- content.code.annotate
- content.tabs.link
- toc.follow
palette:
- media: "(prefers-color-scheme: light)"
scheme: default
primary: custom
accent: blue
toggle:
icon: material/brightness-7
name: Switch to dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
primary: custom
accent: blue
toggle:
icon: material/brightness-4
name: Switch to light mode
icon:
repo: fontawesome/brands/github
extra_css:
- stylesheets/extra.css
- https://cdn.jsdelivr.net/npm/@docsearch/css@3
plugins:
- search:
separator: '[\s\-\._]+'
- gen-files:
scripts:
- docs/gen_ref_pages.py
- literate-nav:
nav_file: SUMMARY.md
- mkdocstrings:
default_handler: python
handlers:
python:
paths: [src]
options:
show_source: true
show_root_heading: true
show_root_full_path: false
show_category_heading: true
show_symbol_type_heading: true
show_symbol_type_toc: true
members_order: source
docstring_style: numpy
docstring_section_style: spacy
merge_init_into_class: true
show_signature_annotations: true
separate_signature: true
signature_crossrefs: true
show_if_no_docstring: false
inherited_members: false
filters:
- "!^_"
- "^__init__$"
- "^__all__$"
markdown_extensions:
- abbr
- admonition
- attr_list
- def_list
- footnotes
- md_in_html
- tables
- toc:
permalink: true
toc_depth: 3
- pymdownx.betterem:
smart_enable: all
- pymdownx.caret
- pymdownx.details
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
- pymdownx.highlight:
anchor_linenums: true
line_spans: __span
pygments_lang_class: true
- pymdownx.inlinehilite
- pymdownx.keys
- pymdownx.mark
- pymdownx.smartsymbols
- pymdownx.snippets:
auto_append:
- docs/includes/abbreviations.md
check_paths: false
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.tabbed:
alternate_style: true
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.tilde
extra_javascript:
- javascripts/leaderboard.js
- https://cdn.jsdelivr.net/npm/@docsearch/js@3
- javascripts/docsearch-init.js
extra:
algolia:
app_id: "" # Fill after DocSearch approval
api_key: "" # Search-only key
index_name: "" # e.g. "openjarvis"
social:
- icon: fontawesome/brands/github
link: https://github.com/open-jarvis/OpenJarvis
nav:
- Home: index.md
- Getting Started:
- Installation: getting-started/installation.md
- macOS Guide: getting-started/macos.md
- Quick Start: getting-started/quickstart.md
- Code Snippets: getting-started/snippets.md
- Configuration: getting-started/configuration.md
- Tutorials:
- Overview: tutorials/index.md
- Deep Research Assistant: tutorials/deep-research.md
- Scheduled Personal Ops: tutorials/scheduled-ops.md
- Messaging Hub: tutorials/messaging-hub.md
- Code Companion: tutorials/code-companion.md
- Architecture:
- Overview: architecture/overview.md
- Intelligence: architecture/intelligence.md
- Engine: architecture/engine.md
- Agents: architecture/agents.md
- Tools & Memory: architecture/memory.md
- Learning: architecture/learning.md
- Query Flow: architecture/query-flow.md
- Security: architecture/security.md
- Design Principles: architecture/design-principles.md
- API Reference: api-reference/
- User Guide:
- Tools: user-guide/tools.md
- External MCP Servers: user-guide/mcp-external-servers.md
- Leaderboard: leaderboard.md
- Roadmap: development/roadmap.md