Skip to main content
Glama
carlosazaustre

Activity Reporting MCP Server

README.md
# Unified Activity Reporting MCP Server

## šŸŽÆ Overview

A unified MCP (Model Context Protocol) server that enables **both Google Developer Experts (GDEs) and Microsoft MVPs** to report their activities through AI-powered conversational interfaces.

**Stop the boring manual data entry!** Just talk to Claude and submit your activities naturally - whether it's a YouTube video, blog post, conference talk, or mentoring session.

### Supported Programs

- āœ… **Microsoft MVP** - Direct API integration with the MVP portal
- āœ… **Google GDE** - Integration with Advocu API
- šŸ”§ **Both at once** - If you're both an MVP and GDE, use one tool for everything!

---

## šŸš€ Quick Start

### Prerequisites

- Node.js 18+
- Claude Desktop
- At least one access token (MVP or GDE)

### Installation

#### Option 1: Local Development (Recommended)

```bash
git clone https://github.com/carlosazaustre/advocu-mcp-server.git
cd advocu-mcp-server
npm install
npm run build
```

#### Option 2: Global Install

```bash
npm install -g advocu-mcp-server
```

### Configuration

Edit your Claude Desktop config file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

#### For Both MVP + GDE:

```json
{
  "mcpServers": {
    "activity-reporting": {
      "command": "node",
      "args": ["/absolute/path/to/advocu-mcp-server/dist/index.js"],
      "env": {
        "MVP_ACCESS_TOKEN": "your_mvp_bearer_token",
        "MVP_USER_PROFILE_ID": "your_mvp_profile_id",
        "ADVOCU_ACCESS_TOKEN": "your_gde_token",
        "DOCS_DIR": "/absolute/path/to/advocu-mcp-server/docs"
      }
    }
  }
}
```

> **šŸ“š Important**: The `DOCS_DIR` environment variable is **required** for documentation tools to work. Set it to the absolute path of the `docs` directory in your installation.

#### MVP Only:

```json
{
  "mcpServers": {
    "activity-reporting": {
      "command": "node",
      "args": ["/absolute/path/to/dist/index.js"],
      "env": {
        "MVP_ACCESS_TOKEN": "your_mvp_bearer_token",
        "MVP_USER_PROFILE_ID": "your_mvp_profile_id",
        "DOCS_DIR": "/absolute/path/to/advocu-mcp-server/docs"
      }
    }
  }
}
```

#### GDE Only:

```json
{
  "mcpServers": {
    "activity-reporting": {
      "command": "node",
      "args": ["/absolute/path/to/dist/index.js"],
      "env": {
        "ADVOCU_ACCESS_TOKEN": "your_gde_token",
        "DOCS_DIR": "/absolute/path/to/advocu-mcp-server/docs"
      }
    }
  }
}
```

### Get Your Tokens

#### Microsoft MVP Token

**For Claude Desktop users only** (not Claude Code):

```bash
npm run capture-mvp-token
```

This tool will:
1. **Open your default browser** to the MVP portal (you should already be logged in)
2. Show you detailed instructions to capture the token from DevTools
3. **Paste your token** when prompted
4. **Automatically update your Claude Desktop config file** with the new token
5. No browser automation detection - uses your real browser session!

#### Google GDE Token

Get your token from the [Advocu Developer Portal](https://advocu.com).

### Restart Claude Desktop

```bash
# Quit completely
Cmd+Q  # macOS
Alt+F4 # Windows

# Then reopen Claude Desktop
```

Look for the šŸ”Ø hammer icon to confirm tools are loaded!

---

## šŸ’¬ Usage Examples

Just talk to Claude naturally! Here are examples:

### Documentation Tools

```
"List available documentation"
```

```
"Show me the MVP API reference"
```

```
"What documentation is available?"
```

```
"Get the error handling documentation"
```

### Microsoft MVP Activities

#### Submit a Video

```
"Submit my YouTube video to Microsoft MVP:
- Title: Complete Guide to React Server Components
- Published: October 9, 2025
- URL: https://youtube.com/watch?v=example
- Livestream views: 12,500
- On-demand views: 12,500
- Sessions: 1
- Target audience: Developers, Technical Decision Makers
- My role: Host
- Tech area: Web Development
- Description: A comprehensive tutorial covering React Server Components..."
```

#### Submit a Blog Post

```
"Add my latest blog post to MVP:
- Title: Understanding TypeScript Generics
- Date: 2025-10-01
- URL: https://myblog.com/typescript-generics
- Views: 5,000
- Target audience: Developers
- Role: Author
- Tech area: Developer Tools"
```

#### Submit a Conference Talk

```
"Report my conference presentation to MVP:
- Title: Building Scalable APIs with Node.js
- Date: 2025-09-15
- URL: https://conference.com/my-talk
- In-person attendees: 250
- Sessions: 1
- Target audience: Developers, IT Pros
- Role: Speaker
- Tech area: Cloud & AI"
```

### Google GDE Activities

```
"Submit my workshop to my GDE profile:
- Title: Advanced React Patterns Workshop
- Type: Workshop
- Date: 2025-08-20
- Format: Hybrid
- Country: United States
- In-person attendees: 50
- Total attendees: 150
- URL: https://workshop.com"
```

```
"Create a content creation draft for my Medium article about Next.js 14"
```

```
"Report my mentoring session with 3 developers about TypeScript best practices"
```

---

## šŸ”§ Available Tools

### Documentation Tools (2) - Always Available

| Tool | Description | Usage |
|------|-------------|-------|
| `list_documentation` | List all available documentation | "List available documentation" |
| `get_documentation` | Get a specific documentation file | "Show me the MVP API reference" |

**Available Documents:**
- `api-reference` - Complete API documentation for MVP and GDE
- `mvp-api-reference` - Detailed MVP API specifications
- `mvp-fixes-changelog` - MVP integration fixes history
- `error-handling` - Error handling improvements guide
- `mcp-resources` - MCP resources usage guide

> šŸ“š **Note**: Documentation tools require `DOCS_DIR` to be set in your configuration.

### Microsoft MVP Tools (3)

| Tool | Description | Key Fields |
|------|-------------|------------|
| `submit_mvp_video` | Videos, webinars, livestreams | views, sessions, role, tech area |
| `submit_mvp_blog` | Blog posts, articles | views, subscribers, tech area |
| `submit_mvp_speaking` | Conference talks, presentations | attendees, sessions, tech area |

### Google GDE Tools (7)

| Tool | Description |
|------|-------------|
| `submit_gde_content_creation` | Articles, videos, podcasts |
| `submit_gde_public_speaking` | Talks and presentations |
| `submit_gde_workshop` | Training sessions |
| `submit_gde_mentoring` | Mentoring activities |
| `submit_gde_product_feedback` | Product feedback |
| `submit_gde_googler_interaction` | Google employee interactions |
| `submit_gde_story` | Success stories |

---

## šŸ”„ Token Refresh

### Microsoft MVP Token (Expires: Hours/Days)

Your MVP token expires regularly. When you get a 401 error or your token expires:

**For Claude Desktop users:**

```bash
cd /path/to/advocu-mcp-server
npm run capture-mvp-token
```

**What happens:**
1. 🌐 Your default browser opens to the MVP portal
2. āœ… If you're already logged in, you'll see your account immediately
3. šŸ” If not logged in, log in with Microsoft (2FA supported)
4. šŸ› ļø Open DevTools (F12 or Cmd+Option+I)
5. šŸ“ Navigate to "Add activity" and fill any field
6. šŸ” In Network tab, find the request to `mavenapi-prod.azurewebsites.net`
7. šŸ“‹ Copy the Bearer token from the Authorization header
8. āŒØļø Paste the token in the terminal
9. āœ… **Your Claude Desktop config file is automatically updated!**
10. šŸ”„ Restart Claude Desktop

**Advantages:**
- āœ… Uses your real browser (no automation detection)
- āœ… Works with 2FA/MFA
- āœ… Automatically updates your Claude Desktop config file
- āœ… Clear step-by-step instructions

### Google GDE Token (Expires: Less frequently)

Get a fresh token from Advocu when needed and update your config manually.

---

## šŸ“‹ Required Fields Reference

### MVP Video Activity

```typescript
{
  title: string;              // Max 100 chars
  description: string;        // Max 1000 chars
  date: string;              // YYYY-MM-DD
  url: string;               // Video URL
  targetAudience: string[];  // Developer, Student, IT Pro, etc.
  role: string;              // Host, Presenter, etc.
  technologyFocusArea: string;
  liveStreamViews: number;
  onDemandViews: number;
  numberOfSessions: number;  // Default: 1
  isPrivate: boolean;        // Optional
}
```

### MVP Blog Activity

```typescript
{
  title: string;
  description: string;
  date: string;
  url: string;
  targetAudience: string[];
  role: string;              // Author, Contributor, etc.
  technologyFocusArea: string;
  numberOfViews: number;
  subscriberBase: number;    // Optional
  isPrivate: boolean;        // Optional
}
```

### MVP Speaking Activity

```typescript
{
  title: string;
  description: string;
  date: string;
  url: string;
  targetAudience: string[];
  role: string;              // Speaker, Panelist, etc.
  technologyFocusArea: string;
  inPersonAttendees: number;
  numberOfSessions: number;
  liveStreamViews: number;   // Optional
  onDemandViews: number;     // Optional
  isPrivate: boolean;        // Optional
}
```

---

## šŸ—ļø Project Structure

```
advocu-mcp-server/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ index.ts                    # Entry point
│   ā”œā”€ā”€ unifiedServer.ts            # Main unified server (MVP + GDE)
│   ā”œā”€ā”€ server.ts                   # Legacy GDE-only server
│   ā”œā”€ā”€ mvpServer.ts                # Standalone MVP server
│   ā”œā”€ā”€ interfaces/                 # Activity interfaces
│   │   ā”œā”€ā”€ ActivityDraftBase.ts    # GDE base interface
│   │   ā”œā”€ā”€ ContentCreationDraft.ts # GDE content creation
│   │   ā”œā”€ā”€ ...                     # Other GDE interfaces
│   │   └── mvp/                    # MVP interfaces
│   │       ā”œā”€ā”€ MVPActivityBase.ts
│   │       ā”œā”€ā”€ MVPVideoActivity.ts
│   │       ā”œā”€ā”€ MVPBlogActivity.ts
│   │       └── MVPSpeakingActivity.ts
│   └── types/                      # Type definitions
│       ā”œā”€ā”€ ContentType.ts          # GDE types
│       ā”œā”€ā”€ ...
│       └── mvp/                    # MVP types
│           ā”œā”€ā”€ MVPActivityType.ts
│           ā”œā”€ā”€ MVPActivityRole.ts
│           └── MVPTargetAudience.ts
ā”œā”€ā”€ scripts/
│   ā”œā”€ā”€ capture-mvp-token.ts        # Token capture tool
│   └── README.md                   # Script documentation
ā”œā”€ā”€ dist/                           # Compiled output
└── docs/                           # šŸ“š Documentation (required for doc tools)
    ā”œā”€ā”€ API.md                      # Complete API reference
    ā”œā”€ā”€ MVP_API_REFERENCE.md        # MVP API specifications
    ā”œā”€ā”€ CHANGELOG_MVP_FIXES.md      # MVP integration changelog
    ā”œā”€ā”€ ERROR_HANDLING_IMPROVEMENTS.md  # Error handling guide
    ā”œā”€ā”€ MCP_RESOURCES.md            # MCP resources guide
    └── RELEASE_NOTES_v0.2.0.md     # Release notes
```

---

## šŸ› ļø Development

### Build

```bash
npm run build
```

### Development Mode

```bash
npm run dev
```

### Lint and Format

```bash
npm run lint
npm run format
```

### Capture MVP Token

```bash
npm run capture-mvp-token
```

---

## šŸ› Troubleshooting

### Tools Don't Appear in Claude Desktop

1. **Check config path**: Ensure your `claude_desktop_config.json` is in the right location
2. **Verify build**: Run `npm run build` in the project directory
3. **Check logs**: Restart Claude Desktop and check for errors
4. **Verify tokens**: Make sure at least one token (MVP or GDE) is configured

### 401 Unauthorized Error (MVP)

Your token expired. Run:

```bash
npm run capture-mvp-token
```

Follow the instructions to capture a fresh token from DevTools, then restart Claude Desktop.

### "At least one of GDE or MVP must be configured"

You need to set either:
- `ADVOCU_ACCESS_TOKEN` (for GDE), or
- `MVP_ACCESS_TOKEN` + `MVP_USER_PROFILE_ID` (for MVP)

Both can be set if you're both an MVP and GDE!

### Documentation Tools Not Working

If you get errors like "Failed to read resource" or "Documentation not found":

1. **Check `DOCS_DIR` is set**: Make sure you added `DOCS_DIR` to your Claude Desktop config
2. **Verify the path**: The path must be **absolute** and point to the `docs` directory
3. **Example**: `"DOCS_DIR": "/Users/yourname/advocu-mcp-server/docs"`
4. **Check directory exists**: Run `ls "$DOCS_DIR"` to verify the directory exists
5. **Restart Claude Desktop**: Changes to config require a restart

**Example config:**
```json
{
  "env": {
    "MVP_ACCESS_TOKEN": "...",
    "DOCS_DIR": "/absolute/path/to/advocu-mcp-server/docs"
  }
}
```

### MVP Submission Fails

1. **Check your profile ID**: Make sure `MVP_USER_PROFILE_ID` is correct
2. **Verify token**: Run `npm run capture-mvp-token` to get a fresh token
3. **Check required fields**: All required fields must be provided
4. **Target audience**: Must be an array (e.g., `["Developer"]`)

---

## šŸ”’ Security & Privacy

- **Tokens are stored locally** in your Claude Desktop config
- **Never commit tokens** to version control
- **`captured-api-calls.json` is in `.gitignore`** - it contains sensitive data
- **MVP tokens expire** regularly for security
- **Tokens are never sent** to anyone except the official APIs

---

## šŸ“– API Documentation

### Microsoft MVP API

- **Base URL**: `https://mavenapi-prod.azurewebsites.net/api`
- **Endpoint**: `POST /Activities/`
- **Authentication**: Bearer token
- **Payload**: `{ "activity": { ...fields } }`

### Google GDE API (Advocu)

- **Base URL**: `https://api.advocu.com/personal-api/v1/gde`
- **Endpoints**: `/activity-drafts/{type}`
- **Authentication**: Bearer token
- **Rate Limit**: 30 requests/minute

For detailed field documentation, see [docs/API.md](docs/API.md).

---

## šŸ¤ Contributing

1. Fork the project
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Commit your changes (use conventional commits)
4. Push to the branch: `git push origin feature/amazing-feature`
5. Open a Pull Request

---

## šŸ“ License

MIT License - see [LICENSE](LICENSE) file for details.

---

## šŸ™ Acknowledgments

- Built for Google Developer Experts and Microsoft MVPs
- Powered by [Model Context Protocol (MCP)](https://modelcontextprotocol.io)
- Integrates with [Advocu](https://advocu.com) and Microsoft MVP Portal

---

## šŸ’” Tips

- **Be specific**: The more details you provide to Claude, the better
- **Natural language**: Just describe what you did - Claude will structure it
- **Batch submissions**: Submit multiple activities in one conversation
- **Check responses**: Claude will show you the API response for verification
- **Token expires?** Just run `npm run capture-mvp-token` and paste your new token - takes 30 seconds

---

**Questions or issues?** Open an issue on GitHub or check the [troubleshooting section](#-troubleshooting).

**Want to add more activity types?** Check out the code structure and submit a PR! šŸš€

TDQS

B3.2/5.0

Scored across 7 tools

Disambiguation5/5

Every tool has a clearly distinct purpose focused on submitting different types of activities (content creation, googler interaction, mentoring, product feedback, public speaking, story, workshop). There is no overlap in functionality - each tool handles a unique activity category, making misselection unlikely.

Naming Consistency5/5

All tools follow a perfect verb_noun pattern with 'submit_' prefix followed by the activity type. The naming is completely consistent across all 7 tools, using snake_case uniformly without any deviations or mixed conventions.

Tool Count5/5

With 7 tools, this is well-scoped for an activity reporting server. Each tool represents a distinct activity category that would realistically need separate submission handling, and the count feels appropriate for the domain without being too sparse or bloated.

Completeness3/5

The server provides comprehensive submission coverage for various activity types, but there are notable gaps in the lifecycle. There are no tools for retrieving, updating, deleting, or listing submitted activities, which limits agents to only creation workflows without the ability to manage existing submissions.

Maintenance

ActivityInactive
ResponsivenessNo issues