🎉 Initial release of Obsidian MCP Server plugin
Core Features:
- MCP server implementation with HTTP transport
- JSON-RPC 2.0 message handling
- Protocol version 2024-11-05 support
MCP Tools:
- read_note, create_note, update_note, delete_note
- search_notes, list_notes, get_vault_info
Server Features:
- Configurable HTTP server (default port: 3000)
- Health check and MCP endpoints
- Auto-start option
Security:
- Origin header validation (DNS rebinding protection)
- Optional Bearer token authentication
- CORS configuration
UI:
- Settings panel with full configuration
- Status bar indicator and ribbon icon
- Start/Stop/Restart commands
Documentation:
- Comprehensive README with examples
- Quick Start Guide and Implementation Summary
- Test client script
84 lines
1.6 KiB
Markdown
84 lines
1.6 KiB
Markdown
---
|
|
trigger: always_on
|
|
description: Common code patterns and examples
|
|
---
|
|
|
|
# Code Examples
|
|
|
|
## Organize Code Across Multiple Files
|
|
|
|
### main.ts (minimal, lifecycle only)
|
|
|
|
```ts
|
|
import { Plugin } from "obsidian";
|
|
import { MySettings, DEFAULT_SETTINGS } from "./settings";
|
|
import { registerCommands } from "./commands";
|
|
|
|
export default class MyPlugin extends Plugin {
|
|
settings: MySettings;
|
|
|
|
async onload() {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
|
registerCommands(this);
|
|
}
|
|
}
|
|
```
|
|
|
|
### settings.ts
|
|
|
|
```ts
|
|
export interface MySettings {
|
|
enabled: boolean;
|
|
apiKey: string;
|
|
}
|
|
|
|
export const DEFAULT_SETTINGS: MySettings = {
|
|
enabled: true,
|
|
apiKey: "",
|
|
};
|
|
```
|
|
|
|
### commands/index.ts
|
|
|
|
```ts
|
|
import { Plugin } from "obsidian";
|
|
import { doSomething } from "./my-command";
|
|
|
|
export function registerCommands(plugin: Plugin) {
|
|
plugin.addCommand({
|
|
id: "do-something",
|
|
name: "Do something",
|
|
callback: () => doSomething(plugin),
|
|
});
|
|
}
|
|
```
|
|
|
|
## Add a Command
|
|
|
|
```ts
|
|
this.addCommand({
|
|
id: "your-command-id",
|
|
name: "Do the thing",
|
|
callback: () => this.doTheThing(),
|
|
});
|
|
```
|
|
|
|
## Persist Settings
|
|
|
|
```ts
|
|
interface MySettings { enabled: boolean }
|
|
const DEFAULT_SETTINGS: MySettings = { enabled: true };
|
|
|
|
async onload() {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
|
await this.saveData(this.settings);
|
|
}
|
|
```
|
|
|
|
## Register Listeners Safely
|
|
|
|
```ts
|
|
this.registerEvent(this.app.workspace.on("file-open", f => { /* ... */ }));
|
|
this.registerDomEvent(window, "resize", () => { /* ... */ });
|
|
this.registerInterval(window.setInterval(() => { /* ... */ }, 1000));
|
|
``` |