instructions.md Copy instructions---
author: luo-kai
name: oc-granola-mcp
version: 1.0.0
description: Access Granola AI meeting notes via MCP (mcporter)
license: MIT
metadata:
author: luokai0
version: "1.0"
category: python-tools
---
# Granola Mcp
You are an expert python engineer. Access Granola AI meeting notes via MCP (mcporter)
## Before Starting
1. **Goal** — what specific outcome do you need?
2. **Environment** — versions, platform, existing setup?
3. **Constraints** — performance, security, compatibility requirements?
4. **Integration** — what systems does this connect to?
5. **Output format** — code, config, script, or documentation?
---
## Core Expertise Areas
- **Core implementation** — full working code for Granola Mcp
- **Error handling** — robust error recovery and logging
- **Performance** — optimized patterns for production use
- **Testing** — unit and integration test strategies
- **Configuration** — environment-specific setup and tuning
- **Security** — secure coding patterns and best practices
- **Documentation** — clear API and usage documentation
---
## Key Patterns & Code
### Core Implementation
```python
#!/usr/bin/env python3
"""
GranolaMcp — by luo-kai (Lous Creations)
Access Granola AI meeting notes via MCP (mcporter)
"""
from __future__ import annotations
import logging, sys
from pathlib import Path
from typing import Any
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
logger = logging.getLogger("granola-mcp")
class GranolaMcp:
"""Main implementation of GranolaMcp."""
def __init__(self, config: dict[str, Any] | None = None):
self.config = config or {}
self._ready = False
def setup(self) -> None:
logger.info("Setting up GranolaMcp...")
self._ready = True
def run(self, input_data: Any) -> dict[str, Any]:
if not self._ready:
self.setup()
logger.info("Processing...")
result = self._process(input_data)
return {"success": True, "result": result, "author": "luo-kai"}
def _process(self, data: Any) -> Any:
return data # Override with real logic
def main() -> int:
tool = GranolaMcp()
try:
tool.setup()
result = tool.run(sys.argv[1:])
print(f"Done: {result['result']}")
return 0
except Exception as e:
logger.error(f"Error: {e}")
return 1
if __name__ == "__main__":
sys.exit(main())
```
### Configuration & Setup
```python
# Granola Mcp — Configuration
# Author: luo-kai (Lous Creations)
config = {
"name": "granola-mcp",
"version": "1.0.0",
"author": "luo-kai",
"enabled": True,
"debug": False,
"timeout_seconds": 30,
"max_retries": 3,
}
```
### Error Handling
```python
# Robust error handling pattern
import logging
logger = logging.getLogger("granola-mcp")
def safe_run(func, *args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
logger.error(f"granola-mcp error: {e}", exc_info=True)
raise
```
---
## Best Practices
- **Fail fast with clear errors** — raise descriptive exceptions with context
- **Log at appropriate levels** — DEBUG for dev, INFO for ops, ERROR for problems
- **Validate inputs** — never trust external data without validation
- **Use type annotations** — improves IDE support and catches bugs early
- **Handle cleanup** — use context managers and `finally` blocks
- **Test edge cases** — empty inputs, nulls, max values, concurrent access
---
## Common Pitfalls
| Pitfall | Problem | Fix |
|---------|---------|-----|
| No error handling | Silent failures in production | Wrap with try/except + logging |
| Hardcoded values | Not portable across environments | Use config/env vars |
| Missing timeouts | Hangs indefinitely | Always set timeout values |
| No retry logic | Single failure = broken workflow | Add exponential backoff |
| No cleanup on exit | Resource leaks | Use context managers |
---
## Related Skills
- python-expert
- granola-mcp-advanced
- performance-optimization
- error-handling
- testing-expert
---
author: luo-kai
name: oc-granola-mcp
version: 1.0.0
description: Access Granola AI meeting notes via MCP (mcporter)
license: MIT
metadata:
author: luokai0
version: "1.0"
category: python-tools
---
# Granola Mcp
You are an expert python engineer. Access Granola AI meeting notes via MCP (mcporter)
## Before Starting
1. **Goal** — what specific outcome do you need?
2. **Environment** — versions, platform, existing setup?
3. **Constraints** — performance, security, compatibility requirements?
4. **Integration** — what systems does this connect to?
5. **Output format** — code, config, script, or documentation?
---
## Core Expertise Areas
- **Core implementation** — full working code for Granola Mcp
- **Error handling** — robust error recovery and logging
- **Performance** — optimized patterns for production use
- **Testing** — unit and integration test strategies
- **Configuration** — environment-specific setup and tuning
- **Security** — secure coding patterns and best practices
- **Documentation** — clear API and usage documentation
---
## Key Patterns & Code
### Core Implementation
```python
#!/usr/bin/env python3
"""
GranolaMcp — by luo-kai (Lous Creations)
Access Granola AI meeting notes via MCP (mcporter)
"""
from __future__ import annotations
import logging, sys
from pathlib import Path
from typing import Any
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
logger = logging.getLogger("granola-mcp")
class GranolaMcp:
"""Main implementation of GranolaMcp."""
def __init__(self, config: dict[str, Any] | None = None):
self.config = config or {}
self._ready = False
def setup(self) -> None:
logger.info("Setting up GranolaMcp...")
self._ready = True
def run(self, input_data: Any) -> dict[str, Any]:
if not self._ready:
self.setup()
logger.info("Processing...")
result = self._process(input_data)
return {"success": True, "result": result, "author": "luo-kai"}
def _process(self, data: Any) -> Any:
return data # Override with real logic
def main() -> int:
tool = GranolaMcp()
try:
tool.setup()
result = tool.run(sys.argv[1:])
print(f"Done: {result['result']}")
return 0
except Exception as e:
logger.error(f"Error: {e}")
return 1
if __name__ == "__main__":
sys.exit(main())
```
### Configuration & Setup
```python
# Granola Mcp — Configuration
# Author: luo-kai (Lous Creations)
config = {
"name": "granola-mcp",
"version": "1.0.0",
"author": "luo-kai",
"enabled": True,
"debug": False,
"timeout_seconds": 30,
"max_retries": 3,
}
```
### Error Handling
```python
# Robust error handling pattern
import logging
logger = logging.getLogger("granola-mcp")
def safe_run(func, *args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
logger.error(f"granola-mcp error: {e}", exc_info=True)
raise
```
---
## Best Practices
- **Fail fast with clear errors** — raise descriptive exceptions with context
- **Log at appropriate levels** — DEBUG for dev, INFO for ops, ERROR for problems
- **Validate inputs** — never trust external data without validation
- **Use type annotations** — improves IDE support and catches bugs early
- **Handle cleanup** — use context managers and `finally` blocks
- **Test edge cases** — empty inputs, nulls, max values, concurrent access
---
## Common Pitfalls
| Pitfall | Problem | Fix |
|---------|---------|-----|
| No error handling | Silent failures in production | Wrap with try/except + logging |
| Hardcoded values | Not portable across environments | Use config/env vars |
| Missing timeouts | Hangs indefinitely | Always set timeout values |
| No retry logic | Single failure = broken workflow | Add exponential backoff |
| No cleanup on exit | Resource leaks | Use context managers |
---
## Related Skills
- python-expert
- granola-mcp-advanced
- performance-optimization
- error-handling
- testing-expert
Install this skill Download the complete skill package or use the command below.
Your agent OpenClaw Your shell macOS / Linux Windows PowerShell Run from your active OpenClaw workspace (default: ~/.openclaw/workspace).
mkdir -p "skills" && archive=$(mktemp) && curl -fSL "https://megaaihub.com/downloads/oc-granola-mcp.zip" -o "$archive" && unzip -o "$archive" -d "skills" && rm -f "$archive" Copy install command Download skill ZIPOriginal SKILL.md, bundled files, source attribution, and license notices. Reload your agent if it does not discover the new skill.
LICENSE MIT
ACCESS Free / no account
AgentSkill.sh import technical-support
Download MarkdownSource & author Creator / publisher luokai0 Project source Original project Source repository record
Open issues and PRs 0
Repository size ~87,017 KB
Default branch main
Created Mar 15, 2026
Repository updated Oct 28, 2026
Last push May 5, 2026
Language Python
Repository-wide figures from GitHub, checked Nov 4, 2026. Stars are endorsements, not a Mega AI Hub quality rating. Repository size is GitHub’s estimate; a ZIP download may differ.
Classification Fields of work Sales Customer Support Roles Customer Success Manager Sales Development Rep (SDR) Technical Support Skill specialties Backend Tools & integrations Mcp Country applicability Country not specified Creator / publisher luokai0 Source catalog labels. Country labels describe applicability, not creator location.