5.8 KiB
ObsidianReviewBot Fixes Design
Date: 2025-10-28 Status: Approved PR: https://github.com/obsidianmd/obsidian-releases/pull/8298
Overview
This design addresses all required issues identified by ObsidianReviewBot for the MCP Server plugin submission to the Obsidian community plugin repository.
Required Fixes
- Config path documentation - Update hardcoded
.obsidianexamples to generic alternatives - Command naming - Remove "MCP Server" from command display names
- File deletion API - Replace
vault.delete()withapp.fileManager.trashFile() - Inline styles - Extract 90+ JavaScript style assignments to CSS with semantic class names
Implementation Strategy
Approach: Fix-by-fix across files - Complete one type of fix across all affected files before moving to the next fix type.
Benefits:
- Groups related changes together for clearer git history
- Easier to test each fix type independently
- Simpler code review with focused commits
Fix Order and Details
Fix 1: Config Path Documentation
Files affected: src/tools/index.ts
Changes:
- Line 235: Update exclude pattern example from
['.obsidian/**', '*.tmp']to['templates/**', '*.tmp'] - Line 300: Same update for consistency
Rationale: Obsidian's configuration directory isn't necessarily .obsidian - users can configure this. Examples should use generic folders rather than system directories.
Risk: None - documentation only, no functional changes
Fix 2: Command Naming
Files affected: src/main.ts
Changes:
- Line 54: "Start MCP Server" → "Start server"
- Line 62: "Stop MCP Server" → "Stop server"
- Line 70: "Restart MCP Server" → "Restart server"
Note: Command IDs remain unchanged (stable API requirement)
Rationale: Obsidian plugin guidelines state command names should not include the plugin name itself.
Risk: Low - purely cosmetic change to command palette display
Fix 3: File Deletion API
Files affected: src/tools/note-tools.ts
Changes:
- Line 162:
await this.vault.delete(existingFile)→await this.fileManager.trashFile(existingFile) - Line 546:
await this.vault.delete(file)→await this.fileManager.trashFile(file)
Context:
- Line 162: Overwrite conflict resolution when creating files
- Line 546: Permanent delete operation (when soft=false)
Rationale: Use app.fileManager.trashFile() instead of direct deletion to respect user's trash preferences configured in Obsidian settings.
Risk: Medium - changes deletion behavior, requires testing both scenarios
Testing:
- Verify overwrite conflict resolution still works
- Verify permanent delete operation respects user preferences
- Confirm files go to user's configured trash location
Fix 4: Inline Styles to CSS
Files affected:
styles.css(add new classes)src/settings.ts(remove inline styles, add CSS classes)
New CSS Classes:
/* Authentication section */
.mcp-auth-section { margin-bottom: 20px; }
.mcp-auth-summary {
font-size: 1.17em;
font-weight: bold;
margin-bottom: 12px;
cursor: pointer;
}
/* API key display */
.mcp-key-display {
padding: 12px;
background-color: var(--background-secondary);
border-radius: 4px;
font-family: monospace;
font-size: 0.9em;
word-break: break-all;
user-select: all;
cursor: text;
margin-bottom: 16px;
}
/* Tab navigation */
.mcp-config-tabs {
display: flex;
gap: 8px;
margin-bottom: 16px;
border-bottom: 1px solid var(--background-modifier-border);
}
.mcp-tab {
padding: 8px 16px;
border: none;
background: none;
cursor: pointer;
border-bottom: 2px solid transparent;
}
.mcp-tab-active {
border-bottom-color: var(--interactive-accent);
font-weight: bold;
}
/* Config display */
.mcp-config-display {
padding: 12px;
background-color: var(--background-secondary);
border-radius: 4px;
font-size: 0.85em;
overflow-x: auto;
user-select: text;
cursor: text;
margin-bottom: 12px;
}
/* Helper text */
.mcp-file-path {
padding: 8px;
background-color: var(--background-secondary);
border-radius: 4px;
font-family: monospace;
font-size: 0.9em;
margin-bottom: 12px;
color: var(--text-muted);
}
.mcp-usage-note {
font-size: 0.9em;
color: var(--text-muted);
font-style: italic;
}
/* Additional utility classes */
.mcp-heading {
margin-top: 24px;
margin-bottom: 12px;
}
.mcp-container { margin-bottom: 20px; }
.mcp-button-group {
display: flex;
gap: 8px;
margin-bottom: 12px;
}
.mcp-label {
margin-bottom: 4px;
font-size: 0.9em;
color: var(--text-muted);
}
Changes to settings.ts:
- Remove all
.style.property assignments (90+ lines) - Add corresponding CSS class names using
.addClass()orclassNameproperty - Preserve dynamic styling for tab active state (use conditional class application)
Rationale: Obsidian plugin guidelines require styles to be in CSS files rather than applied via JavaScript. This improves maintainability and follows platform conventions.
Risk: High - largest refactor, visual regression possible
Testing:
- Build and load in Obsidian
- Verify settings panel appearance unchanged in both light and dark themes
- Test all interactive elements: collapsible sections, tabs, buttons
- Confirm responsive behavior
Testing Strategy
After each fix:
- Run
npm test- ensure no test failures - Run
npm run build- verify TypeScript compilation - Check for linting issues
Before final commit:
- Full test suite passes
- Clean build with no warnings
- Manual smoke test of all settings UI features
- Visual verification in both light and dark themes
Success Criteria
- All 4 ObsidianReviewBot required issues resolved
- No test regressions
- No visual regressions in settings panel
- Clean build with no TypeScript errors
- Ready for PR re-submission