AGENT SKILL

evernote-install-auth

Install and configure Evernote SDK and OAuth authentication. Use when setting up a new Evernote integration, configuring API keys, or initializing Evernote in your project. Trigger with phrases like "install evernote", "setup evernote", "evernote auth", "configure evernote API", "evernote oauth".

适用职业开发工程师
License 许可
MIT
最近更新
2026-03-20
Stars
★ 4
Forks
0

01 前言 Front Matter

name
evernote-install-auth
author
Jeremy Longshore <jeremy@intentsolutions.io>
license
MIT
version
1.0.0
description
Install and configure Evernote SDK and OAuth authentication. Use when setting up a new Evernote integration, configuring API keys, or initializing Evernote in your project. Trigger with phrases like "install evernote", "setup evernote", "evernote auth", "configure evernote API", "evernote oauth".
allowed-tools
Read, Write, Edit, Bash(npm:*), Bash(pip:*), Grep
compatible-with
claude-code, codex, openclaw

03 SKILL.md 正文

Evernote Install & Auth

Overview

Set up Evernote SDK and configure OAuth 1.0a authentication for accessing the Evernote Cloud API.

Prerequisites

  • Node.js 18+ or Python 3.10+
  • Package manager (npm, pnpm, or pip)
  • Evernote developer account
  • API key from Evernote Developer Portal (requires approval, allow 5 business days)

Instructions

Step 1: Request API Key

  1. Go to Evernote Developer Portal
  2. Request an API key via the contact form
  3. Wait for manual approval (up to 5 business days)
  4. Receive your consumerKey and consumerSecret

Step 2: Install SDK

set -euo pipefail
# Node.js
npm install evernote

# Python
pip install evernote

Step 3: Configure Environment

# Create .env file
cat << 'EOF' >> .env
EVERNOTE_CONSUMER_KEY=your-consumer-key
EVERNOTE_CONSUMER_SECRET=your-consumer-secret
EVERNOTE_SANDBOX=true
EOF

Step 4: Initialize OAuth Client

// Node.js - Initialize client for OAuth flow
const Evernote = require('evernote');

const client = new Evernote.Client({
  consumerKey: process.env.EVERNOTE_CONSUMER_KEY,
  consumerSecret: process.env.EVERNOTE_CONSUMER_SECRET,
  sandbox: process.env.EVERNOTE_SANDBOX === 'true',
  china: false
});
# Python - Initialize client
from evernote.api.client import EvernoteClient

client = EvernoteClient(
    consumer_key='your-consumer-key',
    consumer_secret='your-consumer-secret',
    sandbox=True
)

Step 5: Implement OAuth Flow

// Step 5a: Get request token and redirect URL
const callbackUrl = 'http://localhost:3000/oauth/callback';  # 3000: 3 seconds in ms

client.getRequestToken(callbackUrl, (error, oauthToken, oauthTokenSecret) => {
  if (error) {
    console.error('Failed to get request token:', error);
    return;
  }

  // Store tokens in session (required for callback)
  req.session.oauthToken = oauthToken;
  req.session.oauthTokenSecret = oauthTokenSecret;

  // Redirect user to Evernote authorization page
  const authorizeUrl = client.getAuthorizeUrl(oauthToken);
  res.redirect(authorizeUrl);
});
// Step 5b: Handle OAuth callback
app.get('/oauth/callback', (req, res) => {
  const oauthVerifier = req.query.oauth_verifier;

  client.getAccessToken(
    req.session.oauthToken,
    req.session.oauthTokenSecret,
    oauthVerifier,
    (error, oauthAccessToken, oauthAccessTokenSecret, results) => {
      if (error) {
        console.error('Failed to get access token:', error);
        return res.status(500).send('Authentication failed');  # HTTP 500 Internal Server Error
      }

      // Store access token securely (valid for 1 year by default)
      req.session.accessToken = oauthAccessToken;

      // Token expiration included in results.edam_expires
      console.log('Token expires:', new Date(parseInt(results.edam_expires)));

      res.redirect('/dashboard');
    }
  );
});

Step 6: Verify Connection

// Create authenticated client and verify
const authenticatedClient = new Evernote.Client({
  token: req.session.accessToken,
  sandbox: true
});

const userStore = authenticatedClient.getUserStore();
const noteStore = authenticatedClient.getNoteStore();

// Verify connection
userStore.getUser().then(user => {
  console.log('Authenticated as:', user.username);
  console.log('User ID:', user.id);
}).catch(err => {
  console.error('Authentication verification failed:', err);
});

Development Tokens (Sandbox Only)

For development, use a Developer Token instead of full OAuth:

  1. Create a sandbox account at https://sandbox.evernote.com
  2. Get a Developer Token from https://sandbox.evernote.com/api/DeveloperToken.action
  3. Use directly without OAuth flow:
const client = new Evernote.Client({
  token: process.env.EVERNOTE_DEV_TOKEN,
  sandbox: true
});

const noteStore = client.getNoteStore();

Note: Developer tokens are currently unavailable for production. Use OAuth for production applications.

Output

  • Installed SDK package in node_modules or site-packages
  • Environment variables configured
  • Working OAuth flow implementation
  • Successful connection verification

Error Handling

Error Cause Solution
Invalid consumer key Wrong or unapproved key Verify key from developer portal
OAuth signature mismatch Incorrect consumer secret Check secret matches portal
Token expired Access token > 1 year old Re-authenticate user via OAuth
RATE_LIMIT_REACHED Too many API calls Implement exponential backoff
Permission denied Insufficient API key permissions Request additional permissions

Token Expiration

  • Default token validity: 1 year
  • Users can reduce to: 1 day, 1 week, or 1 month
  • Expiration timestamp in edam_expires parameter
  • Implement token refresh before expiration

Resources

Next Steps

After successful auth, proceed to evernote-hello-world for your first note creation.

Examples

Basic usage: Apply evernote install auth to a standard project setup with default configuration options.

Advanced scenario: Customize evernote install auth for production environments with multiple constraints and team-specific requirements.

04 同仓库更多 Skills

micsapp
micsapp/micstec-skills

azure-apim-architecture

Analyzes and explains Azure API Management architecture decisions for enterprise API marketplace implementations using VNet Internal mode, Front Door, hybrid authentication, and multi-environment strategies. Use when discussing APIM component selection, network topology, cost optimization, or comparing alternatives like workspaces vs instances, VNet Internal vs External mode, or Front Door vs Application Gateway.

开发工程师后端与接口
★ 4
micsapp
micsapp/micstec-skills

apiops-deployment

Guides deployment of Azure API Management infrastructure using Infrastructure as Code (Bicep/Terraform), CI/CD pipelines (GitHub Actions/Azure DevOps), and APIOps workflows. Use when deploying APIM, creating pipelines, or implementing dev→test→prod promotion strategies.

开发工程师后端与接口运维与部署
★ 4
micsapp
micsapp/micstec-skills

apim-policy-authoring

Creates production-ready Azure API Management policy XML for authentication (OAuth 2.0, JWT validation, subscription keys), rate limiting, CORS configuration, error handling, and API transformations. Use when implementing API security, access control, or request/response processing logic.

后端与接口
★ 4
micsapp
micsapp/micstec-skills

api-security-review

Reviews Azure API Management configurations for security vulnerabilities, OWASP API Security Top 10 compliance, VNet Internal mode validation, Private Link verification, and Azure Security Benchmark alignment. Use when performing security audits, pre-deployment validation, or compliance reviews.

开发工程师后端与接口
★ 4
micsapp
micsapp/micstec-skills

jira-cli

Interact with Jira from the command line to create, list, view, edit, and transition issues, manage sprints and epics, and perform common Jira workflows. Use when the user asks about Jira tasks, tickets, issues, sprints, or needs to manage project work items.

★ 4
micsapp
micsapp/micstec-skills

calculator

Performs arbitrary-precision arithmetic calculations including addition, subtraction, multiplication, division, and exponents. Use when the user asks to calculate, compute, or evaluate math expressions, or when precise decimal arithmetic is needed to avoid floating-point errors.

★ 4