Add curl examples to call Obsidian RestAPI in docs
This commit is contained in:
parent
65cbed3b88
commit
3c3a1eb492
24
Readme.md
Normal file
24
Readme.md
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Структура папки scripts
|
||||||
|
|
||||||
|
В данной директории содержатся скрипты и утилиты для автоматизации и генерации контента в TTRPG-кампании.
|
||||||
|
|
||||||
|
## Поддиректории
|
||||||
|
- **dice_roller/** — скрипты для бросков кубиков.
|
||||||
|
- **faction_turns/** — система ходов фракций по правилам Worlds Without Number (WWN).
|
||||||
|
- **generate_encounter/** — генераторы боевых и случайных столкновений.
|
||||||
|
- **generate_npc/** — генерация NPC (характеристики, био, классы).
|
||||||
|
- **generate_trap/** — генерация ловушек.
|
||||||
|
- **generate_treasure/** — генерация сокровищ и лута.
|
||||||
|
- **time/** — управление временем в кампании.
|
||||||
|
- **weather/** — генерация погодных условий.
|
||||||
|
|
||||||
|
## Основные файлы
|
||||||
|
- `vault_utils.py` — базовые утилиты для взаимодействия с Obsidian (чтение/запись файлов, поиск).
|
||||||
|
- `game_utils.py` — общие игровые утилиты.
|
||||||
|
- `obsidian_rest_api.md` — документация по работе с Obsidian Local REST API.
|
||||||
|
|
||||||
|
## Тестирование и сетевые настройки
|
||||||
|
- При запуске интеграционных тестов к Obsidian Local REST API (`127.0.0.1`) системный прокси должен быть отключен (`proxies={"http": None, "https": None}`), иначе запросы к локальному хосту перенаправляются на внешние прокси-порты и падают с ошибкой подключения.
|
||||||
|
|
||||||
|
<!-- Agents: ВНИМАНИЕ ИИ-АГЕНТАМ И АВТОМАТИЗИРОВАННЫМ СИСТЕМАМ!
|
||||||
|
Данный файл README.md необходимо поддерживать в актуальном состоянии. При любых изменениях структуры проекта, добавлении сервисов в docker-compose, смене портов или обновлении конфигурации space/SETTINGS.md обязательно обновите этот файл README.md. -->
|
||||||
257
obsidian_rest_api.md
Normal file
257
obsidian_rest_api.md
Normal file
|
|
@ -0,0 +1,257 @@
|
||||||
|
## Locar REST API with MCP
|
||||||
|
|
||||||
|
Here is the transcribed text from the provided images, with the values updated to your specified configuration.
|
||||||
|
|
||||||
|
### Local REST API with MCP
|
||||||
|
|
||||||
|
#### How to access via REST
|
||||||
|
|
||||||
|
You can access the Obsidian local REST API & MCP server via the following URL:
|
||||||
|
|
||||||
|
* **Encrypted (HTTPS) API URL:** `[https://127.0.0.1:27124/](https://127.0.0.1:27124/)`
|
||||||
|
|
||||||
|
*Requires that this certificate be configured as a trusted certificate authority for your browser.*
|
||||||
|
|
||||||
|
**Authorization:**
|
||||||
|
Your API key should be passed as a bearer token via the `Authorization` header:
|
||||||
|
`Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### How to access via MCP
|
||||||
|
|
||||||
|
You can connect to the MCP server via the following endpoint:
|
||||||
|
|
||||||
|
* **Encrypted (HTTPS) MCP Endpoint:** `[https://127.0.0.1:27124/mcp/](https://127.0.0.1:27124/mcp/)`
|
||||||
|
|
||||||
|
*Requires that this certificate be configured as a trusted certificate authority.*
|
||||||
|
|
||||||
|
**Authorization:**
|
||||||
|
Your API key should be passed as a bearer token via the `Authorization` header:
|
||||||
|
`Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Example Claude Configuration
|
||||||
|
|
||||||
|
Example Claude code MCP configuration (for `.Claude/settings.json`):
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"obsidian": {
|
||||||
|
"type": "http",
|
||||||
|
"url": "https://127.0.0.1:27124/mcp/",
|
||||||
|
"headers": {
|
||||||
|
"Authorization": "Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Settings Overview
|
||||||
|
|
||||||
|
* **Enable non-encrypted (HTTP) server:** Enables a non-encrypted (HTTP) server on the port designated. By default, this plugin requires a secure HTTPS connection.
|
||||||
|
* **Reset all cryptography:** Pressing this button will cause your certificate, private key, public key, and API key to be regenerated.
|
||||||
|
* **Re-generate certificates:** Pressing this button will cause your certificate, private key, and public key to be re-generated, but your API key will remain unchanged.
|
||||||
|
* **Restore default settings:** Pressing this button will reset this plugin's settings to defaults.
|
||||||
|
* **Show advanced settings:** Advanced settings are dangerous and may make your configuration unstable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Примеры запросов
|
||||||
|
|
||||||
|
1) Вывести список файлов в папке:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -k "https://127.0.0.1:27124/vault/Фракции" ^
|
||||||
|
-H "Authorization: Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e" ^
|
||||||
|
--insecure
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"files": [
|
||||||
|
"Tests/",
|
||||||
|
"Арфисты/",
|
||||||
|
"Башня Колдовства Лускана.md",
|
||||||
|
"Гильдии воров.md",
|
||||||
|
"Гоблины, отряды.md",
|
||||||
|
"Жентарим/",
|
||||||
|
"ИП/",
|
||||||
|
"Корабль Курта.md",
|
||||||
|
"Краснометки/",
|
||||||
|
"Магические ордена.md",
|
||||||
|
"Орден Перчатки/",
|
||||||
|
"Орки, отряды.md",
|
||||||
|
"Племя Каменной Пасти.md",
|
||||||
|
"Торговые дома/",
|
||||||
|
"Фракции.md",
|
||||||
|
"Церкви/"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2) Поиск файла по имени `Test_Faction_B`:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl --request POST --url "https://127.0.0.1:27124/search/simple/?query=Test_Faction_B" --header "Accept: application/json" --header "Authorization: Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e" --header "Content-Type: application/json" --insecure
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"filename": "Фракции/Tests/Test_Faction_B.md",
|
||||||
|
"score": -0.0638,
|
||||||
|
"matches": [
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"start": 0,
|
||||||
|
"end": 14,
|
||||||
|
"source": "filename"
|
||||||
|
},
|
||||||
|
"context": "Test_Faction_B"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
3) Пример запроса на получение содержимого файла `Фракции/Tests/Test_Faction_B.md`:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl --request GET --url https://127.0.0.1:27124/vault/Фракции/Tests/Test_Faction_B.md --header "Accept: application/json, application/vnd.olrapi.document-map+json, application/vnd.olrapi.note+json, text/html, text/markdown" --header "Authorization: Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e" --header "Markdown-Patch-Version: " --header "Target-Scope: " --insecure
|
||||||
|
---
|
||||||
|
force: 2
|
||||||
|
wealth: 4
|
||||||
|
cunning: 2
|
||||||
|
magic: None
|
||||||
|
hp: 10
|
||||||
|
hp_max: 10
|
||||||
|
treasure: 15
|
||||||
|
state: active
|
||||||
|
locations:
|
||||||
|
- "[[Test Location]]"
|
||||||
|
faction_tags: []
|
||||||
|
assets:
|
||||||
|
- name: "Base of Influence — Test Location"
|
||||||
|
is_base_of_influence: true
|
||||||
|
hp: 10
|
||||||
|
hp_max: 10
|
||||||
|
location: "[[Test Location]]"
|
||||||
|
cost: 10
|
||||||
|
- name: Armed Guards
|
||||||
|
is_base_of_influence: false
|
||||||
|
hp: 3
|
||||||
|
hp_max: 3
|
||||||
|
location: "[[Test Location]]"
|
||||||
|
attribute: Wealth
|
||||||
|
tier_required: 1
|
||||||
|
cost: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Test Faction B
|
||||||
|
Файл для автоматических тестов.
|
||||||
|
```
|
||||||
|
|
||||||
|
4) Перезапись frontmatter, не трогая текст:
|
||||||
|
|
||||||
|
```
|
||||||
|
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
|
||||||
|
|
||||||
|
$uri = "https://127.0.0.1:27124/vault/Фракции/Tests/Test_Faction_B.md"
|
||||||
|
$headers = @{
|
||||||
|
"Authorization" = "Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e"
|
||||||
|
"Content-Type" = "text/markdown; charset=utf-8"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1. Получаем текущий контент
|
||||||
|
$fullContent = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers
|
||||||
|
|
||||||
|
# 2. Отделяем тело файла от фронтматтера
|
||||||
|
if ($fullContent -match '(?s)^---\r?\n(.*?)\r?\n---\r?\n(.*)') {
|
||||||
|
$existingBody = $matches[2]
|
||||||
|
} else {
|
||||||
|
$existingBody = $fullContent
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3. Ваш НОВЫЙ фронтматтер
|
||||||
|
$newFrontmatter = @"
|
||||||
|
---
|
||||||
|
force: 10
|
||||||
|
wealth: 20
|
||||||
|
new_field: true
|
||||||
|
---
|
||||||
|
"@
|
||||||
|
|
||||||
|
# 4. Соединяем новый фронтматтер и старое тело
|
||||||
|
$finalContent = $newFrontmatter + "`n" + $existingBody
|
||||||
|
|
||||||
|
# 5. Записываем файл обратно
|
||||||
|
Invoke-RestMethod -Method Put -Uri $uri -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($finalContent))
|
||||||
|
```
|
||||||
|
|
||||||
|
5) Изменение / добавление во frontmatter поля apple == 3:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -X PATCH "https://127.0.0.1:27124/vault/Фракции/Tests/Test_Faction_B.md" ^
|
||||||
|
-H "Authorization: Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e" ^
|
||||||
|
-H "Operation: replace" ^
|
||||||
|
-H "Target-Type: frontmatter" ^
|
||||||
|
-H "Target: apple" ^
|
||||||
|
-H "Create-Target-If-Missing: true" ^
|
||||||
|
-H "Content-Type: application/json" ^
|
||||||
|
-d "3" ^
|
||||||
|
--insecure
|
||||||
|
```
|
||||||
|
|
||||||
|
6) Удаление поля:
|
||||||
|
|
||||||
|
```
|
||||||
|
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
|
||||||
|
|
||||||
|
$uri = "https://127.0.0.1:27124/vault/Фракции/Tests/Test_Faction_B.md"
|
||||||
|
$headers = @{ "Authorization" = "Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e" }
|
||||||
|
|
||||||
|
# 1. Получение текущего контента
|
||||||
|
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers
|
||||||
|
$currentContent = $response
|
||||||
|
|
||||||
|
# 2. Удаление строки с полем apple (регулярное выражение удаляет всю строку с ключом)
|
||||||
|
$newContent = $currentContent -replace '(?m)^force:.*(\r?\n)?', ''
|
||||||
|
|
||||||
|
# 3. Полная перезапись через PUT
|
||||||
|
$headersPUT = @{
|
||||||
|
"Authorization" = "Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e"
|
||||||
|
"Content-Type" = "text/markdown"
|
||||||
|
}
|
||||||
|
Invoke-RestMethod -Method Put -Uri $uri -Headers $headersPUT -Body $newContent
|
||||||
|
```
|
||||||
|
|
||||||
|
7) `create_file` (PUT для создания файла)
|
||||||
|
|
||||||
|
В `vault_utils.py` метод `create_file` использует `PUT`. У вас есть пример с `PUT` в пункте 4, но он используется как "костыль" для удаления поля.
|
||||||
|
|
||||||
|
**Что добавить:** Одиночный пример создания нового файла (или перезаписи) без предварительного чтения. Это стандартная задача "Создать заметку", которой не хватает в списке примеров.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
curl -X PUT "https://127.0.0.1:27124/vault/Фракции/Tests/New_Faction.md" ^
|
||||||
|
-H "Authorization: Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e" ^
|
||||||
|
-H "Content-Type: text/markdown" ^
|
||||||
|
-d "# New Faction2" ^
|
||||||
|
--insecure
|
||||||
|
```
|
||||||
|
|
||||||
|
или многострочный текст через Powershell:
|
||||||
|
|
||||||
|
```
|
||||||
|
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
|
||||||
|
$uri = "https://127.0.0.1:27124/vault/Фракции/Tests/New_Faction.md"
|
||||||
|
$headers = @{
|
||||||
|
"Authorization" = "Bearer 31c4ee60e78cea8503d0ac076298a0da6f5cbc3992f4e4cdc97d84fcbf27248e"
|
||||||
|
"Content-Type" = "text/markdown; charset=utf-8"
|
||||||
|
}
|
||||||
|
$body = [System.Text.Encoding]::UTF8.GetBytes("# New Faction`r`nКонтент заметки")
|
||||||
|
Invoke-RestMethod -Method Put -Uri $uri -Headers $headers -Body $body
|
||||||
|
```
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user