Code
Hub
Workspaces
Following
Trending
Connect
MCP
copy
Create free account
hub
/
github.com/MarkusPfundstein/mcp-obsidian
/ functions
Functions
176 in github.com/MarkusPfundstein/mcp-obsidian
⨍
Functions
176
◇
Types & classes
18
Function
test_bare_heading_not_found_reraises_original_error
()
tests/test_obsidian_heading_fallback.py:155
Function
test_bare_heading_unique_match_autoqualifies
()
tests/test_obsidian_heading_fallback.py:94
Function
test_base_tool_handler_requires_overrides
()
tests/test_tools.py:23
Function
test_batch_get_file_contents_handler_validates_and_returns_text
()
tests/test_tools.py:175
Function
test_call_tool_dispatches_to_handler
()
tests/test_server.py:52
Function
test_call_tool_rejects_non_dict_arguments
()
tests/test_server.py:42
Function
test_call_tool_rejects_unknown_tool
()
tests/test_server.py:47
Function
test_call_tool_wraps_handler_exception
()
tests/test_server.py:63
Function
test_complex_search_handler_validates_and_returns_json
()
tests/test_tools.py:139
Function
test_constructor_allows_http_protocol
()
tests/test_obsidian_requests.py:39
Function
test_constructor_defaults_to_https_for_unknown_protocol
()
tests/test_obsidian_requests.py:34
Function
test_delete_file_handler_requires_confirmation
()
tests/test_tools.py:127
Function
test_delete_file_uses_delete_method
()
tests/test_obsidian_requests.py:125
Function
test_find_heading_paths_allows_up_to_three_leading_spaces
()
tests/test_obsidian_heading_fallback.py:66
Function
test_find_heading_paths_case_insensitive
()
tests/test_obsidian_heading_fallback.py:33
Function
test_find_heading_paths_handles_fences_with_language_markers
()
tests/test_obsidian_heading_fallback.py:71
Function
test_find_heading_paths_handles_sibling_after_descent
()
tests/test_obsidian_heading_fallback.py:55
Function
test_find_heading_paths_ignores_headings_inside_code_fences
()
tests/test_obsidian_heading_fallback.py:48
Function
test_find_heading_paths_returns_all_candidates_when_ambiguous
()
tests/test_obsidian_heading_fallback.py:38
Function
test_find_heading_paths_returns_empty_when_no_match
()
tests/test_obsidian_heading_fallback.py:43
Function
test_find_heading_paths_returns_qualified_path_for_unique_match
()
tests/test_obsidian_heading_fallback.py:28
Function
test_find_heading_paths_strips_closing_atx_hashes
()
tests/test_obsidian_heading_fallback.py:61
Function
test_get_batch_file_contents_includes_successes_and_errors
()
tests/test_obsidian_requests.py:185
Function
test_get_file_contents_handler_json_encodes_content
()
tests/test_tools.py:49
Function
test_get_file_contents_returns_text
()
tests/test_obsidian_requests.py:107
Function
test_get_frontmatter_handler_validates_and_returns_json
()
tests/test_tools.py:165
Function
test_get_frontmatter_hits_vault_path
()
tests/test_get_frontmatter.py:76
Function
test_get_frontmatter_returns_empty_dict_when_api_omits_key
Defensive: if the API payload lacks 'frontmatter' entirely, treat it as no-frontmatter rather than KeyError.
tests/test_get_frontmatter.py:57
Function
test_get_frontmatter_returns_empty_dict_when_api_returns_null_frontmatter
The API can return frontmatter: null for some edge cases — wrapper must coerce to {}.
tests/test_get_frontmatter.py:68
Function
test_get_frontmatter_returns_empty_dict_when_no_frontmatter
A note without YAML frontmatter must yield {} — never an error and never None.
tests/test_get_frontmatter.py:49
Function
test_get_frontmatter_returns_parsed_dict
The server returns frontmatter pre-parsed; the wrapper hands it through verbatim, including nested structures.
tests/test_get_frontmatter.py:36
Function
test_get_frontmatter_sends_note_json_accept_header
Must request the Local REST API's NoteJson view, not the plain text view.
tests/test_get_frontmatter.py:27
Function
test_get_headers_uses_bearer_token
()
tests/test_obsidian_requests.py:44
Function
test_get_periodic_note_content_uses_plain_accept_headers
()
tests/test_obsidian_requests.py:146
Function
test_get_periodic_note_metadata_sets_note_json_accept_header
()
tests/test_obsidian_requests.py:155
Function
test_get_recent_changes_posts_dataview_query
()
tests/test_obsidian_requests.py:173
Function
test_get_recent_periodic_notes_sends_query_params
()
tests/test_obsidian_requests.py:163
Function
test_get_tool_handler_returns_none_for_unknown_tool
()
tests/test_server.py:38
Function
test_list_files_in_dir_handler_validates_and_calls_api
()
tests/test_tools.py:39
Function
test_list_files_in_dir_hits_directory_endpoint
()
tests/test_obsidian_requests.py:99
Function
test_list_files_in_vault_handler_returns_json
()
tests/test_tools.py:32
Function
test_list_files_in_vault_hits_root_vault_endpoint
()
tests/test_obsidian_requests.py:87
Function
test_non_heading_target_type_does_not_trigger_fallback
For target_type='block' or 'frontmatter', a 40080 error must propagate as-is.
tests/test_obsidian_heading_fallback.py:187
Function
test_patch_content_handler_validates_and_calls_api
()
tests/test_tools.py:100
Function
test_patch_content_sends_utf8_bytes_with_plain_content_type
PATCH endpoint rejects charset in Content-Type (error 40012), so we send the body as utf-8 bytes but keep the header plain 'text/markdown'.
tests/test_obsidian_utf8.py:31
Function
test_periodic_notes_handler_passes_metadata_type
()
tests/test_tools.py:199
Function
test_periodic_notes_handler_validates_period_and_type
()
tests/test_tools.py:185
Function
test_put_content_handler_validates_and_calls_api
()
tests/test_tools.py:117
Function
test_put_content_overwrites_on_second_call
Two consecutive put_content calls each send their own full body — the second is not appended to the first. This is the overwrite contract.
tests/test_obsidian_put_content.py:43
Function
test_put_content_roundtrip_via_mocked_get
End-to-end shape: put_content(c) → get_file_contents() returns c. Uses two independent mocks since the real API stores state between calls; he
tests/test_obsidian_put_content.py:59
Function
test_put_content_sends_full_body_verbatim
The entire content arg must arrive as the request body — this is the contract that makes put_content suitable for full-file overwrites.
tests/test_obsidian_put_content.py:32
Function
test_put_content_sends_utf8_bytes_and_charset
()
tests/test_obsidian_utf8.py:43
Function
test_put_content_uses_http_put_at_vault_path
put_content must hit PUT /vault/{filepath} — not POST (append) or PATCH.
tests/test_obsidian_put_content.py:18
Function
test_qualified_path_passes_through_without_get
A target already containing '::' must skip the fallback entirely.
tests/test_obsidian_heading_fallback.py:79
Function
test_recent_changes_handler_uses_defaults
()
tests/test_tools.py:238
Function
test_recent_changes_handler_validates_inputs
()
tests/test_tools.py:226
Function
test_recent_periodic_notes_handler_validates_inputs
()
tests/test_tools.py:205
Function
test_reconfigure_stdio_calls_stream_reconfigure_with_utf8
()
tests/test_stdio.py:6
Function
test_reconfigure_stdio_ignores_non_callable_reconfigure_attribute
()
tests/test_stdio.py:21
Function
test_reconfigure_stdio_ignores_stream_without_reconfigure
()
tests/test_stdio.py:14
Function
test_registered_tools_include_expected_new_and_existing_tools
()
tests/test_server.py:23
Function
test_safe_call_formats_http_error_json_body
()
tests/test_obsidian_requests.py:48
Function
test_safe_call_handles_http_error_empty_body
()
tests/test_obsidian_requests.py:56
Function
test_safe_call_handles_http_error_non_json_body
()
tests/test_obsidian_requests.py:64
Function
test_safe_call_handles_http_error_without_response
()
tests/test_obsidian_requests.py:72
Function
test_safe_call_wraps_request_exception
()
tests/test_obsidian_requests.py:80
Function
test_search_by_tag_empty_results_returns_empty_list
()
tests/test_search_by_tag.py:74
Function
test_search_by_tag_handler_validates_and_returns_paths
()
tests/test_tools.py:150
Function
test_search_by_tag_returns_filenames_only
The wrapper extracts just the filename list from the API's {filename,result} objects — callers don't need the result column.
tests/test_search_by_tag.py:29
Function
test_search_by_tag_strips_trailing_slash_from_dirpath
Trailing slash on dirpath must not produce 'work/projects//*'.
tests/test_search_by_tag.py:61
Function
test_search_by_tag_uses_jsonlogic_in_predicate
Without dirpath, the query is the plain 'tag in tags' JsonLogic predicate.
tests/test_search_by_tag.py:16
Function
test_search_by_tag_with_dirpath_adds_glob_clause
With dirpath, the query becomes an 'and' of the tag predicate and a glob on path.
tests/test_search_by_tag.py:42
Function
test_search_handler_formats_matches_and_defaults_context_length
()
tests/test_tools.py:59
Function
test_search_handler_passes_custom_context_length
()
tests/test_tools.py:84
Function
test_search_json_posts_jsonlogic_payload
()
tests/test_obsidian_requests.py:133
Function
test_search_posts_simple_query_params
()
tests/test_obsidian_requests.py:115
← previous
101–176 of 176, ranked by callers