| name | company-admin |
| description | Access and update company administrative information stored in Notion |
What I Do
This skill instructs how to access and update company administrative information. All data lives in Notion - this skill just tells you where to find it and how to update it.
Prerequisites
Required: .env file
This skill requires a .env file at .opencode/skill/company-admin/.env with Notion page IDs.
If the file doesn't exist or is missing info, ask the user:
I need to set up the company-admin skill. Please provide:
1. MCP Skills page ID (company-level info)
2. Admin/Legal page ID (personal details, sensitive info)
3. Investor Cheat Sheet page ID (optional)
You can find page IDs in the Notion URL after the page title.
Then create the .env file:
# Check if .env exists
cat .opencode/skill/company-admin/.env
# If missing, create it with user-provided values
.env Template
# Notion Page IDs for Company Admin
# Find these in the Notion URL: notion.so/[page-title]-[PAGE_ID]
NOTION_MCP_SKILLS_PAGE_ID=
NOTION_ADMIN_LEGAL_PAGE_ID=
NOTION_INVESTOR_CHEAT_SHEET_ID=
# External service URLs (non-sensitive)
FIRSTBASE_DASHBOARD_URL=https://app.firstbase.io/company/OR5DEAF6/details
TEAM_CALENDAR_URL=https://cal.com/team/0finance/30
Workflow
Step 1: Load Config
# First, check for .env file
cat .opencode/skill/company-admin/.env
If missing or incomplete → Ask user to provide the page IDs and create the file.
Step 2: Fetch from Notion
# For company-level info (incorporation, officers, addresses)
notion_notion-fetch: id="$NOTION_MCP_SKILLS_PAGE_ID"
→ Look at "Company Admin" section
# For personal details (passport, addresses, stock status)
notion_notion-fetch: id="$NOTION_ADMIN_LEGAL_PAGE_ID"
# For investor questions
notion_notion-fetch: id="$NOTION_INVESTOR_CHEAT_SHEET_ID"
Step 3: Update Notion (when user provides new info)
# Update Admin/Legal page (personal info, stock status, etc.)
notion_notion-update-page:
page_id: "$NOTION_ADMIN_LEGAL_PAGE_ID"
command: "insert_content_after"
selection_with_ellipsis: "[find appropriate section]"
new_str: "[new content]"
# Update MCP Skills page (company-level info)
notion_notion-update-page:
page_id: "$NOTION_MCP_SKILLS_PAGE_ID"
command: "insert_content_after" or "replace_content_range"
...
What Goes Where
| Info Type | Store In |
|---|---|
| Personal details (passport, DOB, citizenship) | Admin/Legal page |
| Personal addresses (home, mailing) | Admin/Legal page |
| Stock/shares status | Admin/Legal page |
| Company details (legal name, state, industry) | MCP Skills → Company Admin |
| Officers/directors/shareholders | MCP Skills → Company Admin |
| Company addresses (registered agent, bank) | MCP Skills → Company Admin |
| Service providers (Firstbase, Mercury) | MCP Skills → Company Admin |
| Investor Q&A | Investor Cheat Sheet |
Security Rules
DO
- Store page IDs in
.envfile (gitignored) - Fetch from Notion for accurate, up-to-date info
- Update Notion when user provides new info
- Ask user to create
.envif missing
DON'T
- Hardcode page IDs in the skill file
- Cache sensitive info anywhere locally
- Echo passport numbers, SSN in chat responses
- Guess or make up legal/financial details
Common Tasks
| Task | Action |
|---|---|
| "What's our address?" | Fetch MCP Skills page → Company Admin → Addresses |
| "Update my address" | Update Admin/Legal page in Notion |
| "Fill out a form" | Fetch relevant page, use info, don't echo sensitive data |
| "Add new company info" | Update MCP Skills page → Company Admin section |
| "Stock/shares question" | Fetch Admin/Legal page → Stock section |
Admin Tasks Management
Tasks are stored in the Admin/Legal page under "# Admin Tasks" section.
Task Structure
# Admin Tasks
## Active Tasks
### [Category] (Due: [date])
- [ ] **Task name** - Description
- Subtask or context
- Links, phone numbers, etc.
- [ ] Another task
## Completed Tasks
- [x] Completed task - moved here when done
How to Add a Task
notion_notion-update-page:
page_id: "$NOTION_ADMIN_LEGAL_PAGE_ID"
command: "insert_content_after"
selection_with_ellipsis: "## Active Tasks...appropriate category"
new_str: "- [ ] **New task** - Description\n - Subtask details"
How to Complete a Task
- Fetch the Admin/Legal page
- Find the task in "Active Tasks"
- Move it to "Completed Tasks" section with
[x]checked
notion_notion-update-page:
page_id: "$NOTION_ADMIN_LEGAL_PAGE_ID"
command: "replace_content_range"
selection_with_ellipsis: "- [ ] **Task name**...details"
new_str: "" # Remove from Active
# Then add to Completed:
notion_notion-update-page:
page_id: "$NOTION_ADMIN_LEGAL_PAGE_ID"
command: "insert_content_after"
selection_with_ellipsis: "## Completed Tasks"
new_str: "\n- [x] **Task name** - Done [date]"
How to Add Subtasks
When researching a task reveals subtasks (like Gusto setup), add them nested:
- [ ] **Main task**
- [ ] Subtask 1
- [ ] Subtask 2
- Context: links, phone numbers, notes
Task Categories
| Category | Examples |
|---|---|
| Gusto Setup | Payroll, tax registration, workers comp |
| Stock/Legal | Share issuance, legal filings |
| Tax | Filings, registrations, deadlines |
| Banking | Mercury setup, account changes |
| Compliance | CA requirements, retirement plans |
First-Time Setup
If .env file is missing, run this flow:
- Ask user for Notion page IDs
- Create
.envfile:
cat > .opencode/skill/company-admin/.env << 'EOF'
NOTION_MCP_SKILLS_PAGE_ID=[user-provided]
NOTION_ADMIN_LEGAL_PAGE_ID=[user-provided]
NOTION_INVESTOR_CHEAT_SHEET_ID=[user-provided]
FIRSTBASE_DASHBOARD_URL=https://app.firstbase.io/company/OR5DEAF6/details
TEAM_CALENDAR_URL=https://cal.com/team/0finance/30
EOF
- Verify by fetching a page
- Confirm setup complete