Local REST API for Obsidian — Periodic Notes
Local REST API for Obsidian — Periodic Notes. 10 operations. Lead operation: Delete the current periodic note for the specified period.. Self-contained Naftiko capability covering one Obsidian business surface.
What You Can Do
MCP Tools
delete-current-periodic-note-specified
Delete the current periodic note for the specified period.
get-current-periodic-note-specified
Get current periodic note for the specified period.
partially-update-content-current-periodic
Partially update content in the current periodic note for the specified period.
append-content-current-periodic-note
Append content to the current periodic note for the specified period.
update-content-current-periodic-note
Update the content of the current periodic note for the specified period.
delete-periodic-note-specified-period
Delete the periodic note for the specified period and date.
get-periodic-note-specified-period
Get the periodic note for the specified period and date.
partially-update-content-periodic-note
Partially update content in the periodic note for the specified period and date.
append-content-periodic-note-specified
Append content to the periodic note for the specified period and date.
update-content-periodic-note-specified
Update the content of the periodic note for the specified period and date.
Capability Spec
naftiko: 1.0.0-alpha2
info:
label: Local REST API for Obsidian — Periodic Notes
description: 'Local REST API for Obsidian — Periodic Notes. 10 operations. Lead operation: Delete the current periodic note
for the specified period.. Self-contained Naftiko capability covering one Obsidian business surface.'
tags:
- Obsidian
- Periodic Notes
created: '2026-05-19'
modified: '2026-05-19'
binds:
- namespace: env
keys:
OBSIDIAN_API_KEY: OBSIDIAN_API_KEY
capability:
consumes:
- type: http
namespace: local-rest-periodic-notes
baseUri: https://{host}:{port}
description: Local REST API for Obsidian — Periodic Notes business capability. Self-contained, no shared references.
resources:
- name: periodic-period
path: /periodic/{period}/
operations:
- name: delete
method: DELETE
description: Delete the current periodic note for the specified period.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: get
method: GET
description: Get current periodic note for the specified period.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: patch
method: PATCH
description: Partially update content in the current periodic note for the specified period.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Operation
in: header
type: string
description: Patch operation to perform
required: true
- name: Create-Target-If-Missing
in: header
type: string
description: If the specified Target does not exist, create it?
- name: Apply-If-Content-Preexists
in: header
type: string
description: If patch data already exists in Target, apply patch anyway?
- name: Trim-Target-Whitespace
in: header
type: string
description: Trim whitespace from Target content before applying the operation?
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
required: true
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
required: true
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: body
in: body
type: object
description: Request body (JSON).
required: true
- name: post
method: POST
description: Append content to the current periodic note for the specified period.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Create-Target-If-Missing
in: header
type: string
description: If the specified Target does not exist, create it?
- name: Apply-If-Content-Preexists
in: header
type: string
description: If patch data already exists in Target, apply patch anyway?
- name: Trim-Target-Whitespace
in: header
type: string
description: Trim whitespace from Target content before applying the operation?
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: body
in: body
type: object
description: Request body (JSON).
required: true
- name: put
method: PUT
description: Update the content of the current periodic note for the specified period.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Apply-If-Content-Preexists
in: header
type: string
description: If patch data already exists in Target, apply patch anyway?
- name: Trim-Target-Whitespace
in: header
type: string
description: Trim whitespace from Target content before applying the operation?
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: body
in: body
type: object
description: Request body (JSON).
required: true
- name: periodic-period-year-month-day
path: /periodic/{period}/{year}/{month}/{day}/
operations:
- name: delete
method: DELETE
description: Delete the periodic note for the specified period and date.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: year
in: path
type: number
description: The year of the date for which you would like to grab a periodic note.
required: true
- name: month
in: path
type: number
description: The month (1-12) of the date for which you would like to grab a periodic note.
required: true
- name: day
in: path
type: number
description: The day (1-31) of the date for which you would like to grab a periodic note.
required: true
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: get
method: GET
description: Get the periodic note for the specified period and date.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: year
in: path
type: number
description: The year of the date for which you would like to grab a periodic note.
required: true
- name: month
in: path
type: number
description: The month (1-12) of the date for which you would like to grab a periodic note.
required: true
- name: day
in: path
type: number
description: The day (1-31) of the date for which you would like to grab a periodic note.
required: true
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: patch
method: PATCH
description: Partially update content in the periodic note for the specified period and date.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: year
in: path
type: number
description: The year of the date for which you would like to grab a periodic note.
required: true
- name: month
in: path
type: number
description: The month (1-12) of the date for which you would like to grab a periodic note.
required: true
- name: day
in: path
type: number
description: The day (1-31) of the date for which you would like to grab a periodic note.
required: true
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Operation
in: header
type: string
description: Patch operation to perform
required: true
- name: Create-Target-If-Missing
in: header
type: string
description: If the specified Target does not exist, create it?
- name: Apply-If-Content-Preexists
in: header
type: string
description: If patch data already exists in Target, apply patch anyway?
- name: Trim-Target-Whitespace
in: header
type: string
description: Trim whitespace from Target content before applying the operation?
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
required: true
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
required: true
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: body
in: body
type: object
description: Request body (JSON).
required: true
- name: post
method: POST
description: Append content to the periodic note for the specified period and date.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: year
in: path
type: number
description: The year of the date for which you would like to grab a periodic note.
required: true
- name: month
in: path
type: number
description: The month (1-12) of the date for which you would like to grab a periodic note.
required: true
- name: day
in: path
type: number
description: The day (1-31) of the date for which you would like to grab a periodic note.
required: true
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Create-Target-If-Missing
in: header
type: string
description: If the specified Target does not exist, create it?
- name: Apply-If-Content-Preexists
in: header
type: string
description: If patch data already exists in Target, apply patch anyway?
- name: Trim-Target-Whitespace
in: header
type: string
description: Trim whitespace from Target content before applying the operation?
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: body
in: body
type: object
description: Request body (JSON).
required: true
- name: put
method: PUT
description: Update the content of the periodic note for the specified period and date.
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: year
in: path
type: number
description: The year of the date for which you would like to grab a periodic note.
required: true
- name: month
in: path
type: number
description: The month (1-12) of the date for which you would like to grab a periodic note.
required: true
- name: day
in: path
type: number
description: The day (1-31) of the date for which you would like to grab a periodic note.
required: true
- name: period
in: path
type: string
description: The name of the period for which you would like to grab a periodic note.
required: true
- name: Apply-If-Content-Preexists
in: header
type: string
description: If patch data already exists in Target, apply patch anyway?
- name: Trim-Target-Whitespace
in: header
type: string
description: Trim whitespace from Target content before applying the operation?
- name: Target-Type
in: header
type: string
description: Type of sub-document section to target. When specified, the operation
- name: Target
in: header
type: string
description: The section to target; required when `Target-Type` is specified.
- name: Target-Delimiter
in: header
type: string
description: Delimiter used when specifying nested heading targets (e.g. "Heading 1::Subheading"). Defaults to "::".
- name: body
in: body
type: object
description: Request body (JSON).
required: true
authentication:
type: bearer
token: '{{env.OBSIDIAN_API_KEY}}'
exposes:
- type: rest
namespace: local-rest-periodic-notes-rest
port: 8080
description: REST adapter for Local REST API for Obsidian — Periodic Notes. One Spectral-compliant resource per consumed
operation, prefixed with /v1.
resources:
- path: /v1/periodic/{period}
name: periodic-period
description: REST surface for periodic-period.
operations:
- method: DELETE
name: delete
description: Delete the current periodic note for the specified period.
call: local-rest-periodic-notes.delete
with:
period: rest.period
outputParameters:
- type: object
mapping: $.
- method: GET
name: get
description: Get current periodic note for the specified period.
call: local-rest-periodic-notes.get
with:
period: rest.period
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
outputParameters:
- type: object
mapping: $.
- method: PATCH
name: patch
description: Partially update content in the current periodic note for the specified period.
call: local-rest-periodic-notes.patch
with:
period: rest.period
Operation: rest.Operation
Create-Target-If-Missing: rest.Create-Target-If-Missing
Apply-If-Content-Preexists: rest.Apply-If-Content-Preexists
Trim-Target-Whitespace: rest.Trim-Target-Whitespace
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: POST
name: post
description: Append content to the current periodic note for the specified period.
call: local-rest-periodic-notes.post
with:
period: rest.period
Create-Target-If-Missing: rest.Create-Target-If-Missing
Apply-If-Content-Preexists: rest.Apply-If-Content-Preexists
Trim-Target-Whitespace: rest.Trim-Target-Whitespace
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: PUT
name: put
description: Update the content of the current periodic note for the specified period.
call: local-rest-periodic-notes.put
with:
period: rest.period
Apply-If-Content-Preexists: rest.Apply-If-Content-Preexists
Trim-Target-Whitespace: rest.Trim-Target-Whitespace
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/periodic/{period}/{year}/{month}/{day}
name: periodic-period-year-month-day
description: REST surface for periodic-period-year-month-day.
operations:
- method: DELETE
name: delete
description: Delete the periodic note for the specified period and date.
call: local-rest-periodic-notes.delete
with:
year: rest.year
month: rest.month
day: rest.day
period: rest.period
outputParameters:
- type: object
mapping: $.
- method: GET
name: get
description: Get the periodic note for the specified period and date.
call: local-rest-periodic-notes.get
with:
year: rest.year
month: rest.month
day: rest.day
period: rest.period
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
outputParameters:
- type: object
mapping: $.
- method: PATCH
name: patch
description: Partially update content in the periodic note for the specified period and date.
call: local-rest-periodic-notes.patch
with:
year: rest.year
month: rest.month
day: rest.day
period: rest.period
Operation: rest.Operation
Create-Target-If-Missing: rest.Create-Target-If-Missing
Apply-If-Content-Preexists: rest.Apply-If-Content-Preexists
Trim-Target-Whitespace: rest.Trim-Target-Whitespace
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: POST
name: post
description: Append content to the periodic note for the specified period and date.
call: local-rest-periodic-notes.post
with:
year: rest.year
month: rest.month
day: rest.day
period: rest.period
Create-Target-If-Missing: rest.Create-Target-If-Missing
Apply-If-Content-Preexists: rest.Apply-If-Content-Preexists
Trim-Target-Whitespace: rest.Trim-Target-Whitespace
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
body: rest.body
outputParameters:
- type: object
mapping: $.
- method: PUT
name: put
description: Update the content of the periodic note for the specified period and date.
call: local-rest-periodic-notes.put
with:
year: rest.year
month: rest.month
day: rest.day
period: rest.period
Apply-If-Content-Preexists: rest.Apply-If-Content-Preexists
Trim-Target-Whitespace: rest.Trim-Target-Whitespace
Target-Type: rest.Target-Type
Target: rest.Target
Target-Delimiter: rest.Target-Delimiter
body: rest.body
outputParameters:
- type: object
mapping: $.
- type: mcp
namespace: local-rest-periodic-notes-mcp
port: 9090
transport: http
description: MCP adapter for Local REST API for Obsidian — Periodic Notes. One tool per consumed operation, routed inline
through this capability's consumes block.
tools:
- name: delete-current-periodic-note-specified
description: Delete the current periodic note for the specified period.
hints:
readOnly: false
destructive: true
idempotent: true
call: local-rest-periodic-notes.delete
with:
period: tools.period
outputParameters:
- type: object
mapping: $.
- name: get-current-periodic-note-specified
description: Get current periodic note for the specified period.
hints:
readOnly: true
destructive: false
idempotent: true
call: local-rest-periodic-notes.get
with:
period: tools.period
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
outputParameters:
- type: object
mapping: $.
- name: partially-update-content-current-periodic
description: Partially update content in the current periodic note for the specified period.
hints:
readOnly: false
destructive: false
idempotent: true
call: local-rest-periodic-notes.patch
with:
period: tools.period
Operation: tools.Operation
Create-Target-If-Missing: tools.Create-Target-If-Missing
Apply-If-Content-Preexists: tools.Apply-If-Content-Preexists
Trim-Target-Whitespace: tools.Trim-Target-Whitespace
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: append-content-current-periodic-note
description: Append content to the current periodic note for the specified period.
hints:
readOnly: false
destructive: false
idempotent: false
call: local-rest-periodic-notes.post
with:
period: tools.period
Create-Target-If-Missing: tools.Create-Target-If-Missing
Apply-If-Content-Preexists: tools.Apply-If-Content-Preexists
Trim-Target-Whitespace: tools.Trim-Target-Whitespace
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: update-content-current-periodic-note
description: Update the content of the current periodic note for the specified period.
hints:
readOnly: false
destructive: false
idempotent: true
call: local-rest-periodic-notes.put
with:
period: tools.period
Apply-If-Content-Preexists: tools.Apply-If-Content-Preexists
Trim-Target-Whitespace: tools.Trim-Target-Whitespace
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: delete-periodic-note-specified-period
description: Delete the periodic note for the specified period and date.
hints:
readOnly: false
destructive: true
idempotent: true
call: local-rest-periodic-notes.delete
with:
year: tools.year
month: tools.month
day: tools.day
period: tools.period
outputParameters:
- type: object
mapping: $.
- name: get-periodic-note-specified-period
description: Get the periodic note for the specified period and date.
hints:
readOnly: true
destructive: false
idempotent: true
call: local-rest-periodic-notes.get
with:
year: tools.year
month: tools.month
day: tools.day
period: tools.period
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
outputParameters:
- type: object
mapping: $.
- name: partially-update-content-periodic-note
description: Partially update content in the periodic note for the specified period and date.
hints:
readOnly: false
destructive: false
idempotent: true
call: local-rest-periodic-notes.patch
with:
year: tools.year
month: tools.month
day: tools.day
period: tools.period
Operation: tools.Operation
Create-Target-If-Missing: tools.Create-Target-If-Missing
Apply-If-Content-Preexists: tools.Apply-If-Content-Preexists
Trim-Target-Whitespace: tools.Trim-Target-Whitespace
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: append-content-periodic-note-specified
description: Append content to the periodic note for the specified period and date.
hints:
readOnly: false
destructive: false
idempotent: false
call: local-rest-periodic-notes.post
with:
year: tools.year
month: tools.month
day: tools.day
period: tools.period
Create-Target-If-Missing: tools.Create-Target-If-Missing
Apply-If-Content-Preexists: tools.Apply-If-Content-Preexists
Trim-Target-Whitespace: tools.Trim-Target-Whitespace
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: update-content-periodic-note-specified
description: Update the content of the periodic note for the specified period and date.
hints:
readOnly: false
destructive: false
idempotent: true
call: local-rest-periodic-notes.put
with:
year: tools.year
month: tools.month
day: tools.day
period: tools.period
Apply-If-Content-Preexists: tools.Apply-If-Content-Preexists
Trim-Target-Whitespace: tools.Trim-Target-Whitespace
Target-Type: tools.Target-Type
Target: tools.Target
Target-Delimiter: tools.Target-Delimiter
body: tools.body
outputParameters:
- type: object
mapping: $.